使用Dokan实现虚拟驱动器。困在WriteFile上

时间:2012-02-18 01:38:32

标签: c# writefile dokan

我正在使用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的虚拟驱动器运行app并打开txt文件时,添加一些行并尝试保存它。我从记事本中得到错误“参数是incorect”。

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

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

Dokan应该作为代理工作,允许调用用户定义的WriteFile,对吧?如果它被锁定写作,我怎么能这样做?

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

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

1 个答案:

答案 0 :(得分:1)

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