我可以绕过ERROR_SHARING_VIOLATION吗?

时间:2015-02-13 10:33:10

标签: c# file winapi mutual-exclusion

我有以下C#代码:

static void Main(string[] args)
    {
        FileStream fileStream = null;
        try
        {
            // read from file or write to file
            fileStream = new FileStream(@"D:\FileLock.txt", FileMode.Open, FileAccess.Read, FileShare.None);
        }
        catch
        {
        }
        finally
        {
            fileStream.Close();
        }
    }

我正在尝试使用以下C(WinAPI)代码将文件“D:\ FileLock.txt”复制到另一个位置:

CopyFile(_T("D:\\FileLock.txt"), _T("D:\\temp\\FileLock.txt"),FALSE);

但是我得到了ERROR_SHARING_VIOLATION(正如预期的那样)。

无论如何我可以绕过这个吗? (即在这些条件下复制文件) - 无需修改C#代码

2 个答案:

答案 0 :(得分:-1)

如果您可以更改C#代码,那么这应该有效(更改OP代码以使用FileShare.Read):

static void Main(string[] args)
{
    using (FileStream fileStream = new FileStream(@"D:\FileLock.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
    {
    }
}

答案 1 :(得分:-3)

经过进一步研究,似乎可以通过编写驱动程序并使用一些低级函数来实现。