Skip to main content
 首页 » 编程设计

c#之File.OpenWrite 给出错误,而 FileStream(sFile, FileMode.Open, FileAccess.ReadWrite) 没有

2024年06月20日17me-sa

我有以下代码来检测文件是否已在使用:

public static bool FileInUse(string sFile) 
{ 
    FileStream file = null; 
 
    try 
    { 
        file = new FileStream(sFile, FileMode.Open, FileAccess.ReadWrite); 
        file.Close(); 
 
        file = File.OpenWrite(sFile); 
        file.Close(); 
 
        return false; 
    } 
    catch (Exception) 
    { 
        try { file.Close(); } 
        catch (Exception) { } 
 
        return true; 
    } 
} 

当文件正在使用时,new FileStream(sFile, FileMode.Open, FileAccess.ReadWrite)不会抛出错误,但File.OpenWrite(sFile)会抛出错误:

The process cannot access the file because it is being used by another process.

这是为什么呢?因为我想检查一个文件是否可以以写入模式打开。

请您参考如下方法:

您用于FileStream的构造函数默认为共享模式FileShare.Read,这意味着稍后打开文件进行读取(但不写入)的请求将被允许。即使文件已经打开以供读取(如果这不是独占读取),这也将起作用。

File.OpenWrite上,MSDN在线声明:

This method is equivalent to the FileStream(String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None.

http://msdn.microsoft.com/en-us/library/system.io.file.openwrite(v=vs.110).aspx

这意味着 File.OpenWrite 尝试获得对文件的独占读取访问权限,而不仅仅是独占写入访问权限。

听起来好像当您测试文件“正在使用”时,它已打开供阅读

两种方法都会检查文件是否可用于独占写入。您需要决定您的应用程序是否也需要独占阅读。