Я пишу свою файловую систему с использованием библиотеки C# и Dokan и застрял на WriteFile.Реализация виртуального диска с Dokan. Stuck on 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;
}
}
Когда я запускаю приложение и открываю txt-файл с виртуального диска Dokan, добавьте строку и попытайтесь ее сохранить. Я получаю сообщение из блокнота «Параметр инкрементирован».
В коде я получаю исключение в вызове File.OpenWrite(). Исключением является System.IO.IOException. Сообщение: «Процесс не может получить доступ к файлу foo.txt, потому что он используется другим процессом».
- Файл открыт только с помощью блокнота.
- То же поведение можно наблюдать, например зеркало, поставляемый с Докана библиотекой
- я добавил права администратора в мою программу в манифесте, это не помогло
Докано должно работать как прокси-сервер, позволяющий вызов WriteFile, определенный пользователем, не так ли? Как я могу это сделать, если он заблокирован для записи?
Пожалуйста, помогите. Может быть, у вас есть опыт работы с Dokan или какой-либо подсказкой, почему он не работает.
Я использую - Win 7 Pro x64 - 64 разрядный драйвер Докан - App скомпилирован как x86
Скомпилирован ли драйвер для 32-разрядного, 64-разрядного или AnyCPU (как для вашего кода, так и для Dokan)? Какая битность - это ПК, на котором вы тестируете? –
Возможно, я неправильно читаю, но похоже, что «Блокнот» просит Windows сохранить в Y: \ text.txt, Windows переводит его в Dokan, Dokan перенаправляет его вам, вы передаете его обратно в Windows с тем же путем? Если вы хотите проксировать существующий файл, не должны ли вы использовать другой путь? – hvd
hvd Я не знаю, получит ли Windows из VirtualDriveLetter: \ foo.txt или с фактического пути. Имя файла, которое я получаю в WriteFile, это «\ foo.txt», затем я добавляю полный путь к нему ActualDriveLetter: \ path \ file и пытаюсь открыть его с помощью File.OpenWrite – WannabeCoder