You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ar...@apache.org on 2009/11/13 21:26:06 UTC

svn commit: r835980 - in /incubator/lucene.net/trunk/C#/src: Lucene.Net/Store/ Test/Store/

Author: aroush
Date: Fri Nov 13 20:26:04 2009
New Revision: 835980

URL: http://svn.apache.org/viewvc?rev=835980&view=rev
Log:
Fixed FSDirectory; we now use DirectoryInfo vs. FileInfo

Modified:
    incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/FSDirectory.cs
    incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/FSLockFactory.cs
    incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/LockStressTest.cs
    incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/MMapDirectory.cs
    incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/NIOFSDirectory.cs
    incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/NativeFSLockFactory.cs
    incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/SimpleFSDirectory.cs
    incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/SimpleFSLockFactory.cs
    incubator/lucene.net/trunk/C#/src/Test/Store/TestDirectory.cs
    incubator/lucene.net/trunk/C#/src/Test/Store/TestLockFactory.cs

Modified: incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/FSDirectory.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Store/FSDirectory.cs?rev=835980&r1=835979&r2=835980&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/FSDirectory.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/FSDirectory.cs Fri Nov 13 20:26:04 2009
@@ -191,7 +191,7 @@
 		/// </returns>
 		public static FSDirectory GetDirectory(System.String path)
 		{
-			return GetDirectory(new System.IO.FileInfo(path), null);
+			return GetDirectory(new System.IO.DirectoryInfo(path), null);
 		}
 		
 		/// <summary>Returns the directory instance for the named location.
@@ -209,7 +209,7 @@
 		/// </returns>
 		public static FSDirectory GetDirectory(System.String path, LockFactory lockFactory)
 		{
-			return GetDirectory(new System.IO.FileInfo(path), lockFactory);
+			return GetDirectory(new System.IO.DirectoryInfo(path), lockFactory);
 		}
 		
 		/// <summary>Returns the directory instance for the named location.
@@ -222,10 +222,26 @@
 		/// </param>
 		/// <returns> the FSDirectory for the named file.  
 		/// </returns>
-		public static FSDirectory GetDirectory(System.IO.FileInfo file)
+		public static FSDirectory GetDirectory(System.IO.DirectoryInfo file)
 		{
 			return GetDirectory(file, null);
 		}
+
+        /// <summary>Returns the directory instance for the named location.
+        /// 
+        /// </summary>
+        /// <deprecated> Use {@link #Open(File)}
+        /// 
+        /// </deprecated>
+        /// <param name="file">the path to the directory.
+        /// </param>
+        /// <returns> the FSDirectory for the named file.  
+        /// </returns>
+        [System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+        public static FSDirectory GetDirectory(System.IO.FileInfo file)
+        {
+            return GetDirectory(new System.IO.DirectoryInfo(file.FullName), null);
+        }
 		
 		/// <summary>Returns the directory instance for the named location.
 		/// 
@@ -240,44 +256,61 @@
 		/// </param>
 		/// <returns> the FSDirectory for the named file.  
 		/// </returns>
+		[System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
 		public static FSDirectory GetDirectory(System.IO.FileInfo file, LockFactory lockFactory)
 		{
-			file = GetCanonicalPath(file);
-			
-			FSDirectory dir;
-			lock (DIRECTORIES.SyncRoot)
-			{
-				dir = (FSDirectory) DIRECTORIES[file];
-				if (dir == null)
-				{
-					try
-					{
-						dir = (FSDirectory) System.Activator.CreateInstance(IMPL, true);
-					}
-					catch (System.Exception e)
-					{
-						throw new System.SystemException("cannot load FSDirectory class: " + e.ToString(), e);
-					}
-					dir.Init(file, lockFactory);
-					DIRECTORIES[file] = dir;
-				}
-				else
-				{
-					// Catch the case where a Directory is pulled from the cache, but has a
-					// different LockFactory instance.
-					if (lockFactory != null && lockFactory != dir.GetLockFactory())
-					{
-						throw new System.IO.IOException("Directory was previously created with a different LockFactory instance; please pass null as the lockFactory instance and use setLockFactory to change it");
-					}
-					dir.checked_Renamed = false;
-				}
-			}
-			lock (dir)
-			{
-				dir.refCount++;
-			}
-			return dir;
+            return GetDirectory(new System.IO.DirectoryInfo(file.FullName), lockFactory);
 		}
+
+        /// <summary>Returns the directory instance for the named location.
+        /// 
+        /// </summary>
+        /// <deprecated> Use {@link #Open(File, LockFactory)}
+        /// 
+        /// </deprecated>
+        /// <param name="file">the path to the directory.
+        /// </param>
+        /// <param name="lockFactory">instance of {@link LockFactory} providing the
+        /// locking implementation.
+        /// </param>
+        /// <returns> the FSDirectory for the named file.  
+        /// </returns>
+        public static FSDirectory GetDirectory(System.IO.DirectoryInfo file, LockFactory lockFactory)
+        {
+            FSDirectory dir;
+            lock (DIRECTORIES.SyncRoot)
+            {
+                dir = (FSDirectory)DIRECTORIES[file];
+                if (dir == null)
+                {
+                    try
+                    {
+                        dir = (FSDirectory)System.Activator.CreateInstance(IMPL);
+                    }
+                    catch (System.Exception e)
+                    {
+                        throw new System.SystemException("cannot load FSDirectory class: " + e.ToString(), e);
+                    }
+                    dir.Init(file, lockFactory);
+                    DIRECTORIES[file] = dir;
+                }
+                else
+                {
+                    // Catch the case where a Directory is pulled from the cache, but has a
+                    // different LockFactory instance.
+                    if (lockFactory != null && lockFactory != dir.GetLockFactory())
+                    {
+                        throw new System.IO.IOException("Directory was previously created with a different LockFactory instance; please pass null as the lockFactory instance and use setLockFactory to change it");
+                    }
+                    dir.checked_Renamed = false;
+                }
+            }
+            lock (dir)
+            {
+                dir.refCount++;
+            }
+            return dir;
+        }
 		
 		
 		/// <summary>Returns the directory instance for the named location.
@@ -295,7 +328,7 @@
 		/// </returns>
 		public static FSDirectory GetDirectory(System.String path, bool create)
 		{
-			return GetDirectory(new System.IO.FileInfo(path), create);
+			return GetDirectory(new System.IO.DirectoryInfo(path), create);
 		}
 		
 		/// <summary>Returns the directory instance for the named location.
@@ -311,61 +344,63 @@
 		/// </param>
 		/// <returns> the FSDirectory for the named file.  
 		/// </returns>
+		[System.Obsolete("Use the method that takes a DirectoryInfo, this will be removed in the 3.0 release")]
 		public static FSDirectory GetDirectory(System.IO.FileInfo file, bool create)
 		{
-			FSDirectory dir = GetDirectory(file, null);
-			
-			// This is now deprecated (creation should only be done
-			// by IndexWriter):
-			if (create)
-			{
-				dir.Create();
-			}
-			
-			return dir;
+			return GetDirectory(new System.IO.DirectoryInfo(file.FullName), create);
 		}
+
+        /// <summary>Returns the directory instance for the named location.
+        /// 
+        /// </summary>
+        /// <deprecated> Use IndexWriter's create flag, instead, to
+        /// create a new index.
+        /// 
+        /// </deprecated>
+        /// <param name="file">the path to the directory.
+        /// </param>
+        /// <param name="create">if true, create, or erase any existing contents.
+        /// </param>
+        /// <returns> the FSDirectory for the named file.  
+        /// </returns>
+        public static FSDirectory GetDirectory(System.IO.DirectoryInfo file, bool create)
+        {
+            FSDirectory dir = GetDirectory(file, null);
+
+            // This is now deprecated (creation should only be done
+            // by IndexWriter):
+            if (create)
+            {
+                dir.Create();
+            }
+
+            return dir;
+        }
 		
 		/// <deprecated> 
 		/// </deprecated>
 		private void  Create()
 		{
-			bool tmpBool;
-			if (System.IO.File.Exists(directory.FullName))
-				tmpBool = true;
-			else
-				tmpBool = System.IO.Directory.Exists(directory.FullName);
-			if (tmpBool)
-			{
-				System.String[] files = SupportClass.FileSupport.GetLuceneIndexFiles(directory.FullName, IndexFileNameFilter.GetFilter()); // clear old files
-				if (files == null)
-					throw new System.IO.IOException("cannot read directory " + directory.FullName + ": list() returned null");
-				for (int i = 0; i < files.Length; i++)
-				{
-					System.IO.FileInfo file = new System.IO.FileInfo(System.IO.Path.Combine(directory.FullName, files[i]));
-					bool tmpBool2;
-					if (System.IO.File.Exists(file.FullName))
-					{
-						System.IO.File.Delete(file.FullName);
-						tmpBool2 = true;
-					}
-					else if (System.IO.Directory.Exists(file.FullName))
-					{
-						System.IO.Directory.Delete(file.FullName);
-						tmpBool2 = true;
-					}
-					else
-						tmpBool2 = false;
-					if (!tmpBool2)
-						throw new System.IO.IOException("Cannot delete " + file);
-				}
-			}
-			lockFactory.ClearLock(IndexWriter.WRITE_LOCK_NAME);
-		}
-		
-		// returns the canonical version of the directory, creating it if it doesn't exist.
-		private static System.IO.FileInfo GetCanonicalPath(System.IO.FileInfo file)
-		{
-			return new System.IO.FileInfo(file.FullName);
+			if (directory.Exists)
+ 			{
+ 				System.String[] files = SupportClass.FileSupport.GetLuceneIndexFiles(directory.FullName, IndexFileNameFilter.GetFilter()); // clear old files
+ 				if (files == null)
+ 					throw new System.IO.IOException("cannot read directory " + directory.FullName + ": list() returned null");
+ 				for (int i = 0; i < files.Length; i++)
+ 				{
+                    System.String fileOrDir = System.IO.Path.Combine(directory.FullName, files[i]);
+                    if (System.IO.File.Exists(fileOrDir))
+ 					{
+                        System.IO.File.Delete(fileOrDir);
+ 					}
+                    else if (System.IO.Directory.Exists(fileOrDir))
+ 					{
+                        System.IO.Directory.Delete(fileOrDir);
+ 					}
+                    // no need to throw anything - if a delete fails the exc will propogate to the caller
+ 				}
+ 			}
+ 			lockFactory.ClearLock(IndexWriter.WRITE_LOCK_NAME);
 		}
 		
 		private bool checked_Renamed;
@@ -426,7 +461,7 @@
 		}
 		
 		/// <summary>The underlying filesystem directory </summary>
-		protected internal System.IO.FileInfo directory = null;
+		protected internal System.IO.DirectoryInfo directory = null;
 		
 		/// <deprecated> 
 		/// </deprecated>
@@ -446,9 +481,8 @@
 		/// ({@link NativeFSLockFactory});
 		/// </param>
 		/// <throws>  IOException </throws>
-		protected internal FSDirectory(System.IO.FileInfo path, LockFactory lockFactory)
+		protected internal FSDirectory(System.IO.DirectoryInfo path, LockFactory lockFactory)
 		{
-			path = GetCanonicalPath(path);
 			// new ctors use always NativeFSLockFactory as default:
 			if (lockFactory == null)
 			{
@@ -462,9 +496,8 @@
 		/// best implementation given the current environment.
 		/// The directory returned uses the {@link NativeFSLockFactory}.
 		/// 
-		/// <p>Currently this returns {@link NIOFSDirectory}
-		/// on non-Windows JREs and {@link SimpleFSDirectory}
-		/// on Windows.
+		/// <p>Currently this returns {@link SimpleFSDirectory} as
+		/// NIOFSDirectory is currently not supported.
 		/// 
 		/// <p><b>NOTE</b>: this method may suddenly change which
 		/// implementation is returned from release to release, in
@@ -479,15 +512,42 @@
 		/// 
 		/// <p>See <a href="#subclasses">above</a> 
 		/// </summary>
+		[System.Obsolete("Use the method that takes a DirectoryInfo, this will be removed in the 3.0 release")]
 		public static FSDirectory Open(System.IO.FileInfo path)
 		{
+			System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(path.FullName);
+			return Open(dir, null);
+		}
+		
+		/// <summary>Creates an FSDirectory instance, trying to pick the
+		/// best implementation given the current environment.
+		/// The directory returned uses the {@link NativeFSLockFactory}.
+		/// 
+		/// <p>Currently this returns {@link SimpleFSDirectory} as
+		/// NIOFSDirectory is currently not supported.
+		/// 
+		/// <p><b>NOTE</b>: this method may suddenly change which
+		/// implementation is returned from release to release, in
+		/// the event that higher performance defaults become
+		/// possible; if the precise implementation is important to
+		/// your application, please instantiate it directly,
+		/// instead. On 64 bit systems, it may also good to
+		/// return {@link MMapDirectory}, but this is disabled
+		/// because of officially missing unmap support in Java.
+		/// For optimal performance you should consider using
+		/// this implementation on 64 bit JVMs.
+		/// 
+		/// <p>See <a href="#subclasses">above</a> 
+		/// </summary>
+		public static FSDirectory Open(System.IO.DirectoryInfo path)
+		{
 			return Open(path, null);
 		}
 		
 		/// <summary>Just like {@link #Open(File)}, but allows you to
 		/// also specify a custom {@link LockFactory}. 
 		/// </summary>
-		public static FSDirectory Open(System.IO.FileInfo path, LockFactory lockFactory)
+		public static FSDirectory Open(System.IO.DirectoryInfo path, LockFactory lockFactory)
 		{
 			/* For testing:
 			MMapDirectory dir=new MMapDirectory(path, lockFactory);
@@ -506,7 +566,7 @@
 		}
 		
 		/* will move to ctor, when reflection is removed in 3.0 */
-		private void  Init(System.IO.FileInfo path, LockFactory lockFactory)
+		private void  Init(System.IO.DirectoryInfo path, LockFactory lockFactory)
 		{
 			
 			// Set up lockFactory with cascaded defaults: if an instance was passed in,
@@ -516,13 +576,11 @@
 			
 			directory = path;
 			
-			bool tmpBool;
-			if (System.IO.File.Exists(directory.FullName))
-				tmpBool = true;
-			else
-				tmpBool = System.IO.Directory.Exists(directory.FullName);
-			if (tmpBool && !System.IO.Directory.Exists(directory.FullName))
-				throw new NoSuchDirectoryException("file '" + directory + "' exists but is not a directory");
+            // due to differences in how Java & .NET refer to files, the checks are a bit different
+            if (!directory.Exists && System.IO.File.Exists(directory.FullName))
+            {
+                throw new NoSuchDirectoryException("file '" + directory.FullName + "' exists but is not a directory");
+            }
 			
 			if (lockFactory == null)
 			{
@@ -582,7 +640,7 @@
 			if (lockFactory is FSLockFactory)
 			{
 				FSLockFactory lf = (FSLockFactory) lockFactory;
-				System.IO.FileInfo dir = lf.GetLockDir();
+				System.IO.DirectoryInfo dir = lf.GetLockDir();
 				// if the lock factory has no lockDir set, use the this directory as lockDir
 				if (dir == null)
 				{
@@ -606,32 +664,42 @@
 		/// directory.
 		/// </summary>
 		/// <throws>  IOException if list() returns null  </throws>
+		[System.Obsolete("Use the method that takes a DirectoryInfo, this will be removed in the 3.0 release")]
 		public static System.String[] ListAll(System.IO.FileInfo dir)
 		{
-			bool tmpBool;
-			if (System.IO.File.Exists(dir.FullName))
-				tmpBool = true;
-			else
-				tmpBool = System.IO.Directory.Exists(dir.FullName);
-			if (!tmpBool)
-				throw new NoSuchDirectoryException("directory '" + dir + "' does not exist");
-			else if (!System.IO.Directory.Exists(dir.FullName))
-				throw new NoSuchDirectoryException("file '" + dir + "' exists but is not a directory");
-			
-			// Exclude subdirs
-            System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(dir.FullName);
-            System.IO.FileInfo[] files = di.GetFiles();
+			return ListAll(new System.IO.DirectoryInfo(dir.FullName));
+		}
+		
+        /// <summary>Lists all files (not subdirectories) in the
+        /// directory.  This method never returns null (throws
+        /// {@link IOException} instead).
+        /// 
+        /// </summary>
+        /// <throws>  NoSuchDirectoryException if the directory </throws>
+        /// <summary>   does not exist, or does exist but is not a
+        /// directory.
+        /// </summary>
+        /// <throws>  IOException if list() returns null  </throws>
+        public static System.String[] ListAll(System.IO.DirectoryInfo dir)
+        {
+            if (!dir.Exists)
+            {
+                throw new NoSuchDirectoryException("directory '" + dir.FullName + "' does not exist");
+            }
+            // Exclude subdirs, only the file names, not the paths
+            System.IO.FileInfo[] files = dir.GetFiles();
             System.String[] result = new System.String[files.Length];
             for (int i = 0; i < files.Length; i++)
             {
                 result[i] = files[i].Name;
             }
-			
-			if (result == null)
-				throw new System.IO.IOException("directory '" + dir + "' exists and is a directory, but cannot be listed: list() returned null");
-			
-			return result;
-		}
+
+            // no reason to return null, if the directory cannot be listed, an exception 
+            // will be thrown on the above call to dir.GetFiles()
+            // use of LINQ to create the return value array may be a bit more efficient
+
+            return result;
+        }
 		
 		public override System.String[] List()
 		{
@@ -988,8 +1056,16 @@
 		public virtual System.IO.FileInfo GetFile()
 		{
 			EnsureOpen();
-			return directory;
+			return new System.IO.FileInfo(directory.FullName);
 		}
+
+        // Java Lucene implements GetFile() which returns a FileInfo.
+        // For Lucene.Net, GetDirectory() is more appropriate
+        public virtual System.IO.DirectoryInfo GetDirectory()
+        {
+            EnsureOpen();
+            return directory;
+        }
 		
 		/// <summary>For debug output. </summary>
 		public override System.String ToString()

Modified: incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/FSLockFactory.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Store/FSLockFactory.cs?rev=835980&r1=835979&r2=835980&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/FSLockFactory.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/FSLockFactory.cs Fri Nov 13 20:26:04 2009
@@ -26,7 +26,7 @@
 	{
 		
 		/// <summary> Directory for the lock files.</summary>
-		protected internal System.IO.FileInfo lockDir = null;
+		protected internal System.IO.DirectoryInfo lockDir = null;
 		
 		/// <summary> Set the lock directory. This method can be only called
 		/// once to initialize the lock directory. It is used by {@link FSDirectory}
@@ -34,7 +34,7 @@
 		/// Subclasses can also use this method to set the directory
 		/// in the constructor.
 		/// </summary>
-		protected internal virtual void  SetLockDir(System.IO.FileInfo lockDir)
+		protected internal virtual void  SetLockDir(System.IO.DirectoryInfo lockDir)
 		{
 			if (this.lockDir != null)
 				throw new System.SystemException("You can set the lock directory for this factory only once.");
@@ -42,7 +42,7 @@
 		}
 		
 		/// <summary> Retrieve the lock directory.</summary>
-		public virtual System.IO.FileInfo GetLockDir()
+		public virtual System.IO.DirectoryInfo GetLockDir()
 		{
 			return lockDir;
 		}

Modified: incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/LockStressTest.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Store/LockStressTest.cs?rev=835980&r1=835979&r2=835980&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/LockStressTest.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/LockStressTest.cs Fri Nov 13 20:26:04 2009
@@ -85,7 +85,7 @@
 				throw new System.IO.IOException("InstantiationException when instantiating LockClass " + lockFactoryClassName);
 			}
 			
-			System.IO.FileInfo lockDir = new System.IO.FileInfo(lockDirName);
+			System.IO.DirectoryInfo lockDir = new System.IO.DirectoryInfo(lockDirName);
 			
 			if (lockFactory is NativeFSLockFactory)
 			{

Modified: incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/MMapDirectory.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Store/MMapDirectory.cs?rev=835980&r1=835979&r2=835980&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/MMapDirectory.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/MMapDirectory.cs Fri Nov 13 20:26:04 2009
@@ -112,22 +112,48 @@
 		/// <param name="lockFactory">the lock factory to use, or null for the default.
 		/// </param>
 		/// <throws>  IOException </throws>
-		public MMapDirectory(System.IO.FileInfo path, LockFactory lockFactory):base(path, lockFactory)
+		[System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+		public MMapDirectory(System.IO.FileInfo path, LockFactory lockFactory):base(new System.IO.DirectoryInfo(path.FullName), lockFactory)
 		{
 			InitBlock();
 		}
 		
+        /// <summary>Create a new MMapDirectory for the named location.
+        /// 
+        /// </summary>
+        /// <param name="path">the path of the directory
+        /// </param>
+        /// <param name="lockFactory">the lock factory to use, or null for the default.
+        /// </param>
+        /// <throws>  IOException </throws>
+        public MMapDirectory(System.IO.DirectoryInfo path, LockFactory lockFactory) : base(path, lockFactory)
+        {
+            InitBlock();
+        }
+		
 		/// <summary>Create a new MMapDirectory for the named location and the default lock factory.
 		/// 
 		/// </summary>
 		/// <param name="path">the path of the directory
 		/// </param>
 		/// <throws>  IOException </throws>
-		public MMapDirectory(System.IO.FileInfo path):base(path, null)
+		[System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+		public MMapDirectory(System.IO.FileInfo path):base(new System.IO.DirectoryInfo(path.FullName), null)
 		{
 			InitBlock();
 		}
 		
+        /// <summary>Create a new MMapDirectory for the named location and the default lock factory.
+        /// 
+        /// </summary>
+        /// <param name="path">the path of the directory
+        /// </param>
+        /// <throws>  IOException </throws>
+        public MMapDirectory(System.IO.DirectoryInfo path) : base(path, null)
+        {
+            InitBlock();
+        }
+		
 		// back compatibility so FSDirectory can instantiate via reflection
 		/// <deprecated> 
 		/// </deprecated>
@@ -488,8 +514,8 @@
 		public override IndexInput OpenInput(System.String name, int bufferSize)
 		{
 			EnsureOpen();
-			System.IO.FileInfo f = new System.IO.FileInfo(System.IO.Path.Combine(GetFile().FullName, name));
-			System.IO.FileStream raf = new System.IO.FileStream(f.FullName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
+			System.String path = System.IO.Path.Combine(GetDirectory().FullName, name);
+			System.IO.FileStream raf = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read);
 			try
 			{
 				return (raf.Length <= (long) maxBBuf)?(IndexInput) new MMapIndexInput(this, raf):(IndexInput) new MultiMMapIndexInput(this, raf, maxBBuf);

Modified: incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/NIOFSDirectory.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Store/NIOFSDirectory.cs?rev=835980&r1=835979&r2=835980&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/NIOFSDirectory.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/NIOFSDirectory.cs Fri Nov 13 20:26:04 2009
@@ -46,9 +46,22 @@
 		/// <param name="lockFactory">the lock factory to use, or null for the default.
 		/// </param>
 		/// <throws>  IOException </throws>
-		public NIOFSDirectory(System.IO.FileInfo path, LockFactory lockFactory):base(path, lockFactory)
+		[System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+		public NIOFSDirectory(System.IO.FileInfo path, LockFactory lockFactory):base(new System.IO.DirectoryInfo(path.FullName), lockFactory)
 		{
 		}
+
+        /// <summary>Create a new NIOFSDirectory for the named location.
+        /// 
+        /// </summary>
+        /// <param name="path">the path of the directory
+        /// </param>
+        /// <param name="lockFactory">the lock factory to use, or null for the default.
+        /// </param>
+        /// <throws>  IOException </throws>
+        public NIOFSDirectory(System.IO.DirectoryInfo path, LockFactory lockFactory) : base(path, lockFactory)
+        {
+        }
 		
 		/// <summary>Create a new NIOFSDirectory for the named location and the default lock factory.
 		/// 
@@ -56,9 +69,20 @@
 		/// <param name="path">the path of the directory
 		/// </param>
 		/// <throws>  IOException </throws>
-		public NIOFSDirectory(System.IO.FileInfo path):base(path, null)
+		[System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+		public NIOFSDirectory(System.IO.FileInfo path):base(new System.IO.DirectoryInfo(path.FullName), null)
 		{
 		}
+
+        /// <summary>Create a new NIOFSDirectory for the named location and the default lock factory.
+        /// 
+        /// </summary>
+        /// <param name="path">the path of the directory
+        /// </param>
+        /// <throws>  IOException </throws>
+        public NIOFSDirectory(System.IO.DirectoryInfo path) : base(path, null)
+        {
+        }
 		
 		// back compatibility so FSDirectory can instantiate via reflection
 		/// <deprecated> 

Modified: incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/NativeFSLockFactory.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Store/NativeFSLockFactory.cs?rev=835980&r1=835979&r2=835980&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/NativeFSLockFactory.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/NativeFSLockFactory.cs Fri Nov 13 20:26:04 2009
@@ -112,7 +112,7 @@
 		/// directory itsself. Be sure to create one instance for each directory
 		/// your create!
 		/// </summary>
-		public NativeFSLockFactory():this((System.IO.FileInfo) null)
+		public NativeFSLockFactory():this((System.IO.DirectoryInfo) null)
 		{
 		}
 		
@@ -122,7 +122,7 @@
 		/// </summary>
 		/// <param name="lockDirName">where lock files are created.
 		/// </param>
-		public NativeFSLockFactory(System.String lockDirName):this(new System.IO.FileInfo(lockDirName))
+		public NativeFSLockFactory(System.String lockDirName):this(new System.IO.DirectoryInfo(lockDirName))
 		{
 		}
 		
@@ -132,11 +132,22 @@
 		/// </summary>
 		/// <param name="lockDir">where lock files are created.
 		/// </param>
-		public NativeFSLockFactory(System.IO.FileInfo lockDir)
+		[System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+		public NativeFSLockFactory(System.IO.FileInfo lockDir) : this(new System.IO.DirectoryInfo(lockDir.FullName))
 		{
-			SetLockDir(lockDir);
 		}
 		
+        /// <summary> Create a NativeFSLockFactory instance, storing lock
+        /// files into the specified lockDir:
+        /// 
+        /// </summary>
+        /// <param name="lockDir">where lock files are created.
+        /// </param>
+        public NativeFSLockFactory(System.IO.DirectoryInfo lockDir)
+        {
+            SetLockDir(lockDir);
+        }
+		
 		public override Lock MakeLock(System.String lockName)
 		{
 			lock (this)
@@ -200,7 +211,7 @@
 		private System.IO.FileStream channel;
 		private bool lock_Renamed;
 		private System.IO.FileInfo path;
-		private System.IO.FileInfo lockDir;
+		private System.IO.DirectoryInfo lockDir;
 		
 		/*
 		* The javadocs for FileChannel state that you should have
@@ -213,13 +224,18 @@
 		* instance) have set the same lock dir and lock prefix.
 		*/
 		private static System.Collections.Hashtable LOCK_HELD = new System.Collections.Hashtable();
-		
-		public NativeFSLock(System.IO.FileInfo lockDir, System.String lockFileName)
+
+		[System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+		public NativeFSLock(System.IO.FileInfo lockDir, System.String lockFileName):this(new System.IO.DirectoryInfo(lockDir.FullName), lockFileName)
 		{
-			this.lockDir = lockDir;
-			path = new System.IO.FileInfo(System.IO.Path.Combine(lockDir.FullName, lockFileName));
 		}
 		
+        public NativeFSLock(System.IO.DirectoryInfo lockDir, System.String lockFileName)
+        {
+            this.lockDir = lockDir;
+            path = new System.IO.FileInfo(System.IO.Path.Combine(lockDir.FullName, lockFileName));
+        }
+		
 		private bool LockExists()
 		{
 			lock (this)

Modified: incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/SimpleFSDirectory.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Store/SimpleFSDirectory.cs?rev=835980&r1=835979&r2=835980&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/SimpleFSDirectory.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/SimpleFSDirectory.cs Fri Nov 13 20:26:04 2009
@@ -38,17 +38,31 @@
 		/// <param name="lockFactory">the lock factory to use, or null for the default.
 		/// </param>
 		/// <throws>  IOException </throws>
-		public SimpleFSDirectory(System.IO.FileInfo path, LockFactory lockFactory):base(path, lockFactory)
+		[System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+		public SimpleFSDirectory(System.IO.FileInfo path, LockFactory lockFactory):base(new System.IO.DirectoryInfo(path.FullName), lockFactory)
 		{
 		}
 		
+        /// <summary>Create a new SimpleFSDirectory for the named location.
+        /// 
+        /// </summary>
+        /// <param name="path">the path of the directory
+        /// </param>
+        /// <param name="lockFactory">the lock factory to use, or null for the default.
+        /// </param>
+        /// <throws>  IOException </throws>
+        public SimpleFSDirectory(System.IO.DirectoryInfo path, LockFactory lockFactory) : base(path, lockFactory)
+        {
+        }
+		
 		/// <summary>Create a new SimpleFSDirectory for the named location and the default lock factory.
 		/// 
 		/// </summary>
 		/// <param name="path">the path of the directory
 		/// </param>
 		/// <throws>  IOException </throws>
-		public SimpleFSDirectory(System.IO.FileInfo path):base(path, null)
+        [System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+		public SimpleFSDirectory(System.IO.FileInfo path):base(new System.IO.DirectoryInfo(path.FullName), null)
 		{
 		}
 		
@@ -59,6 +73,16 @@
 		{
 		}
 		
+        /// <summary>Create a new SimpleFSDirectory for the named location and the default lock factory.
+        /// 
+        /// </summary>
+        /// <param name="path">the path of the directory
+        /// </param>
+        /// <throws>  IOException </throws>
+        public SimpleFSDirectory(System.IO.DirectoryInfo path) : base(path, null)
+        {
+        }
+
 		/// <summary>Creates an IndexOutput for the file with the given name. </summary>
 		public override IndexOutput CreateOutput(System.String name)
 		{

Modified: incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/SimpleFSLockFactory.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Store/SimpleFSLockFactory.cs?rev=835980&r1=835979&r2=835980&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/SimpleFSLockFactory.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Lucene.Net/Store/SimpleFSLockFactory.cs Fri Nov 13 20:26:04 2009
@@ -59,24 +59,33 @@
 		/// directory itsself. Be sure to create one instance for each directory
 		/// your create!
 		/// </summary>
-		public SimpleFSLockFactory():this((System.IO.FileInfo) null)
+		public SimpleFSLockFactory():this((System.IO.DirectoryInfo) null)
 		{
 		}
 		
 		/// <summary> Instantiate using the provided directory (as a File instance).</summary>
 		/// <param name="lockDir">where lock files should be created.
 		/// </param>
+		[System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
 		public SimpleFSLockFactory(System.IO.FileInfo lockDir)
 		{
-			SetLockDir(lockDir);
+			SetLockDir(new System.IO.DirectoryInfo(lockDir.FullName));
 		}
+
+        /// <summary> Instantiate using the provided directory (as a File instance).</summary>
+        /// <param name="lockDir">where lock files should be created.
+        /// </param>
+        public SimpleFSLockFactory(System.IO.DirectoryInfo lockDir)
+        {
+            SetLockDir(lockDir);
+        }
 		
 		/// <summary> Instantiate using the provided directory name (String).</summary>
 		/// <param name="lockDirName">where lock files should be created.
 		/// </param>
 		public SimpleFSLockFactory(System.String lockDirName)
 		{
-			lockDir = new System.IO.FileInfo(lockDirName);
+			lockDir = new System.IO.DirectoryInfo(lockDirName);
 			SetLockDir(lockDir);
 		}
 		
@@ -134,13 +143,18 @@
 	{
 		
 		internal System.IO.FileInfo lockFile;
-		internal System.IO.FileInfo lockDir;
-		
-		public SimpleFSLock(System.IO.FileInfo lockDir, System.String lockFileName)
+		internal System.IO.DirectoryInfo lockDir;
+
+		[System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+		public SimpleFSLock(System.IO.FileInfo lockDir, System.String lockFileName) : this(new System.IO.DirectoryInfo(lockDir.FullName), lockFileName)
 		{
-			this.lockDir = lockDir;
-			lockFile = new System.IO.FileInfo(System.IO.Path.Combine(lockDir.FullName, lockFileName));
 		}
+
+        public SimpleFSLock(System.IO.DirectoryInfo lockDir, System.String lockFileName)
+        {
+            this.lockDir = new System.IO.DirectoryInfo(lockDir.FullName);
+            lockFile = new System.IO.FileInfo(System.IO.Path.Combine(lockDir.FullName, lockFileName));
+        }
 		
 		public override bool Obtain()
 		{

Modified: incubator/lucene.net/trunk/C#/src/Test/Store/TestDirectory.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Store/TestDirectory.cs?rev=835980&r1=835979&r2=835980&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Store/TestDirectory.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Store/TestDirectory.cs Fri Nov 13 20:26:04 2009
@@ -63,11 +63,12 @@
 		{
 			System.IO.FileInfo path = new System.IO.FileInfo(SupportClass.AppSettings.Get("tempDir", ""));
 			
-			int sz = 3;
+			int sz = 2;
 			Directory[] dirs = new Directory[sz];
 			
 			dirs[0] = new SimpleFSDirectory(path, null);
-			dirs[1] = new NIOFSDirectory(path, null);
+			// dirs[1] = new NIOFSDirectory(path, null);
+            System.Console.WriteLine("Skipping NIOFSDirectory() test under Lucene.Net");
 			dirs[2] = new MMapDirectory(path, null);
 			
 			for (int i = 0; i < sz; i++)

Modified: incubator/lucene.net/trunk/C#/src/Test/Store/TestLockFactory.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Store/TestLockFactory.cs?rev=835980&r1=835979&r2=835980&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Store/TestLockFactory.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Store/TestLockFactory.cs Fri Nov 13 20:26:04 2009
@@ -368,7 +368,7 @@
 		
 		public virtual void  _testStressLocks(LockFactory lockFactory, System.IO.FileInfo indexDir)
 		{
-			FSDirectory fs1 = FSDirectory.Open(indexDir, lockFactory);
+			FSDirectory fs1 = FSDirectory.Open(new System.IO.DirectoryInfo(indexDir.FullName), lockFactory);
 			
 			// First create a 1 doc index:
 			IndexWriter w = new IndexWriter(fs1, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
@@ -426,9 +426,9 @@
 			
 			System.IO.FileInfo fdir1 = _TestUtil.GetTempDir("TestLockFactory.8");
 			System.IO.FileInfo fdir2 = _TestUtil.GetTempDir("TestLockFactory.8.Lockdir");
-			Directory dir1 = FSDirectory.Open(fdir1, new NativeFSLockFactory(fdir1));
+			Directory dir1 = FSDirectory.Open(new System.IO.DirectoryInfo(fdir1.FullName), new NativeFSLockFactory(fdir1));
 			// same directory, but locks are stored somewhere else. The prefix of the lock factory should != null
-			Directory dir2 = FSDirectory.Open(fdir1, new NativeFSLockFactory(fdir2));
+			Directory dir2 = FSDirectory.Open(new System.IO.DirectoryInfo(fdir2.FullName), new NativeFSLockFactory(fdir2));
 			
 			System.String prefix1 = dir1.GetLockFactory().GetLockPrefix();
 			Assert.IsNull(prefix1, "Lock prefix for lockDir same as directory should be null");