我正在使用C#和Dokan庫編寫我的文件系統,並卡在WriteFile上。與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,因爲它正在被另一個進程使用。」
- 文件只能用記事本打開。
- 同樣的行爲可以用杜坎庫
- 我在清單中添加管理員權限到我的計劃投放的鏡子例如可以觀察到,它並沒有幫助
杜坎應該爲代理工作,允許調用用戶定義的WriteFile,對吧?如果它被鎖定寫入,我該如何做到這一點?
請幫助。也許你對Dokan有任何經驗,或者有任何線索爲什麼不起作用。
我使用 - Win 7的臨64 - 64位杜坎司機 - 應用程序被編譯爲86
是否爲32位,64位或AnyCPU(適用於您的代碼和Dokan)編譯了驅動程序?你正在測試的個人電腦有多少位? – 2012-02-18 01:42:50
也許我在誤讀,但它看起來像記事本要求Windows保存到Y:\ text.txt,Windows將它轉發到Dokan,Dokan將它轉發給您,您將它傳回給Windows,路徑相同?如果你想代理現有的文件,你不應該確保你使用不同的路徑嗎? – hvd 2012-02-18 01:44:24
hvd我不知道如果Windows從VirtualDriveLetter:\ foo.txt或從實際路徑獲取它。我在WriteFile中獲得的文件名是「\ foo.txt」,然後添加它的完整路徑ActualDriveLetter:\ path \ file並嘗試用File.OpenWrite打開它 – WannabeCoder 2012-02-18 02:08:48