Ответ 1
Ну, вы пытаетесь открыть файл file_no.txt
для чтения и для записи с использованием отдельных потоков. Это может не работать, поскольку файл будет заблокирован потоком чтения, поэтому поток записи не может быть создан, и вы получите исключение.
Одним из решений было бы сначала прочитать файл, закрыть поток, а затем записать файл после увеличения fileNo
. Таким образом, файл открывается только один раз за раз.
Другой способ - создать поток файлов для доступа как для чтения, так и для записи:
FileStream fileStream = new FileStream(@"file_no.txt",
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.None);
Принятый ответ на этот вопрос, похоже, также имеет хорошее решение, хотя я предполагаю, что вы не хотите разрешать совместное чтение.
Возможное альтернативное решение
Я понимаю, что вы хотите создавать уникальные файлы журналов, когда запускается ваша программа. Другой способ сделать это:
int logFileNo = 1;
string fileName = String.Format("log_{0}.txt", logFileNo);
while (File.Exists(fileName))
{
logFileNo++;
fileName = String.Format("log_{0}.txt", logFileNo);
}
Это увеличивает число, пока не найдет номер файла, где файл журнала не существует. Недостаток: если у вас есть log_1.txt
и log_5.txt
, следующий файл не будет log_6.txt
, но log_2.txt
.
Чтобы преодолеть это, вы можете перечислить все файлы в своем каталоге с помощью маски log_*.txt
и найти наибольшее число, выполнив некоторые манипуляции с строкой.
Возможности бесконечны: -D