【问题标题】:Can I bypass ERROR_SHARING_VIOLATION?我可以绕过 ERROR_SHARING_VIOLATION 吗?
【发布时间】:2015-02-13 10:33:09
【问题描述】:

我有以下 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# 代码

【问题讨论】:

  • 这没有意义。如果有一种绕过文件共享的方法,那么有人会要求一种方法来禁止绕过文件共享,而其他人只会要求一种方法来绕过它,等等。你最终会陷入一个永无止境的循环.
  • 您确定不能将 C# 代码更改为 FileShare.Read 吗?
  • 让我换个说法。有没有办法复制正在使用的文件?
  • 是的,在源文件上使用 FileShare.Read。
  • 首先问问自己为什么文件被锁定

标签: c# file winapi mutual-exclusion


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 请不要。共享机制旨在保护系统和在其上运行的应用程序的完整性。请回过头来告诉我们为什么需要“绕过共享违规”,哪些程序运行不好,以及为什么修改源是不可能的。
    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多