我正在使用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应该作为代理工作,允许调用用户定义的WriteFile,对吧?如果它被锁定写作,我怎么能这样做?
请帮忙。也许您对Dokan有任何经验或任何线索,为什么它不起作用。
我正在使用 - Win 7 Pro x64 - 64位Dokan驱动程序 - 应用程序编译为x86
答案 0 :(得分:1)
在离开方法之前,您必须在流上调用Dispose。 那不是最好的解决方案。您在CreateFile中构造文件流,将其传递给info.Context并在ReadFile,WriteFile中使用它,并在清理中调用dispose。