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 を使用した経験があるか、Dokan が機能しない理由の手がかりがあるかもしれません。
使用しています - Win 7 Pro x64 - 64 ビット Dokan ドライバー - アプリは x86 としてコンパイルされています