当前位置:编程学习 > C#/ASP.NET >>

C#如何判断文件处于打开状态

对于应用程序,有时候可能需要判断某个文件是否已经被打开,也就是指是否被某个流连接着。这在对文件的读写比较频繁的程序中尤为重要,因为一个文件同一时刻只能有一个流连接的。下面的代码也许能有所帮助。
 
[csharp]  
public class FileStatus  
   {  
       [DllImport("kernel32.dll")]  
       private static extern IntPtr _lopen(string lpPathName, int iReadWrite);  
  
       [DllImport("kernel32.dll")]  
       private static extern bool CloseHandle(IntPtr hObject);  
  
       private const int OF_READWRITE = 2;  
  
       private const int OF_SHARE_DENY_NONE = 0x40;  
  
       private static readonly IntPtr HFILE_ERROR = new IntPtr(-1);  
  
       public static int FileIsOpen(string fileFullName)  
       {  
           if (!File.Exists(fileFullName))  
           {  
               return -1;  
           }  
  
           IntPtr handle = _lopen(fileFullName, OF_READWRITE | OF_SHARE_DENY_NONE);  
  
           if (handle == HFILE_ERROR)  
           {  
               return 1;  
           }  
  
           CloseHandle(handle);  
  
           return 0;  
       }  
   }  
 
 public class FileStatus
    {
        [DllImport("kernel32.dll")]
        private static extern IntPtr _lopen(string lpPathName, int iReadWrite);
 
        [DllImport("kernel32.dll")]
        private static extern bool CloseHandle(IntPtr hObject);
 
        private const int OF_READWRITE = 2;
 
        private const int OF_SHARE_DENY_NONE = 0x40;
 
        private static readonly IntPtr HFILE_ERROR = new IntPtr(-1);
 
        public static int FileIsOpen(string fileFullName)
        {
            if (!File.Exists(fileFullName))
            {
                return -1;
            }
 
            IntPtr handle = _lopen(fileFullName, OF_READWRITE | OF_SHARE_DENY_NONE);
 
            if (handle == HFILE_ERROR)
            {
                return 1;
            }
 
            CloseHandle(handle);
 
            return 0;
        }
    }测试:
 
[csharp]  
class Program  
{  
    static void Main(string[] args)  
    {  
        string testFilePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"testOpen.txt";  
  
        FileStream fs = new FileStream(testFilePath, FileMode.OpenOrCreate, FileAccess.Read);  
  
        BinaryReader br = new BinaryReader(fs);  
  
        br.Read();  
  
        Console.WriteLine("文件被打开");  
  
        int result =FileStatus.FileIsOpen(testFilePath);  
  
        Console.WriteLine(result);  
  
        br.Close();  
  
        Console.WriteLine("文件被关闭");  
  
        result = FileStatus.FileIsOpen(testFilePath);  
  
        Console.WriteLine(result);  
  
        Console.ReadLine();  
    }  
}  
 
    class Program
    {
        static void Main(string[] args)
        {
            string testFilePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"testOpen.txt";
 
            FileStream fs = new FileStream(testFilePath, FileMode.OpenOrCreate, FileAccess.Read);
 
            BinaryReader br = new BinaryReader(fs);
 
            br.Read();
 
            Console.WriteLine("文件被打开");
 
            int result =FileStatus.FileIsOpen(testFilePath);
 
            Console.WriteLine(result);
 
            br.Close();
 
            Console.WriteLine("文件被关闭");
 
            result = FileStatus.FileIsOpen(testFilePath);
 
            Console.WriteLine(result);
 
            Console.ReadLine();
        }
    }结果:
 
\
补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,