0

我正在使用 C# 和 Dokan 库编写我的文件系统并卡在 WriteFile 上。

 public int WriteFile(
            String filename,
            Byte[] buffer,
            ref uint writtenBytes,
            long offset,
            DokanFileInfo info)
        {           
            try
            {
                FileStream fs = File.OpenWrite( GetFullPath(filename) , FileMode.Open );              
                fs.Seek(offset, SeekOrigin.Begin);
                fs.Lock(offset, buffer.Length);
                fs.Write(buffer, 0, buffer.Length);
                fs.Unlock(offset, buffer.Length);
                writtenBytes = (uint)buffer.Length;
                return 0;
            }
            catch (Exception e)
            {
                Console.WriteLine("FAIL WriteFile {0}", e.Message);
                return -1;
            }
        }

当我运行应用程序并从 Dokan 的虚拟驱动器打开 txt 文件时,添加一些行并尝试保存它。我从记事本收到错误“参数不正确”。

在代码中,我在 File.OpenWrite() 调用上遇到异常。异常是 System.IO.IOException。消息:“该进程无法访问文件 foo.txt,因为它正被另一个进程使用。”

  • 文件只能用记事本打开。
  • 使用 Dokan 库提供的 Mirror 示例可以观察到相同的行为
  • 我在清单中为我的程序添加了管理员权限,但没有帮助

Dokan 应该作为代理工作,允许调用用户定义的 WriteFile,对吗?如果它被锁定以进行写作,我该怎么做?

请帮忙。也许您对 Dokan 有任何经验或任何线索为什么它不起作用。

我正在使用 - Win 7 Pro x64 - 64 位 Dokan 驱动程序 - 应用程序编译为 x86

4

1 回答 1

1

在离开该方法之前,您必须在流上调用 Dispose。这不是最好的解决方案。您应该在 CreateFile 中构造文件流,将其传递给 info.Context 并在 ReadFile 、 WriteFile 中使用它,并在 Cleanup 中对其调用 dispose。

于 2012-02-19T10:39:14.720 回答