Я работаю с файловыми дескрипторами правильно, но все равно получаю ошибку - PullRequest
1 голос
/ 13 апреля 2020
string fileText;
using (var reader = File.OpenText(pathToSave)) {
    fileText = await reader.ReadToEndAsync();
    reader.Close();
}

using (var stream = File.Open(pathToSave, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)) {
    Byte[] text = new UTF8Encoding(true).GetBytes("test1" + Environment.NewLine);
    stream.Write(text, 0, text.Length);

    text = new UTF8Encoding(true).GetBytes("test2" + Environment.NewLine);
    stream.Write(text, 0, text.Length);

    stream.Close();
}

Я не работаю с файлами где-либо еще.

Я всегда закрываю файловые дескрипторы после чтения / записи, но все равно получаю сообщение об ошибке, что файл используется другим процессом.

Что я делаю не так?

Ошибка появляется на FileMode.Append.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Я попробовал ваш код, и, похоже, fileText = await reader.ReadToEndAsync(); блокирует файл, поэтому вам нужно выполнить эту задачу перед повторным использованием этого файла.

Вы можете использовать ReadToEnd вместо ReadToEndAsync для синхронной работы :

string fileText;
using (var reader = File.OpenText(pathToSave)) {
    fileText = reader.ReadToEnd();
    reader.Close();
}
0 голосов
/ 13 апреля 2020

@ Джон Доу Отвечая на ваш комментарий, к сожалению, мне не хватает репутации, чтобы сделать это в комментариях. Да, конечно ты можешь! Проверьте это { ссылка } (а также вопрос в этой теме, чтобы понять, если вы этого не сделаете) РЕДАКТИРОВАТЬ: и обязательно посмотрите совет Джоэлиуса об использовании потокового ридера и потокового писателя, это гораздо лучшее решение, чем работает на байтах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...