- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
private string ReadFile(string filePath)
{
string fileText = string.Empty;
int openAttempts = 0;
try
{
using (FileStream fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
using (StreamReader sr = new StreamReader(fs, Encoding.GetEncoding(1252)))
{
fileText = sr.ReadToEnd();
if (!sr.EndOfStream)
{
sr.Close();
fs.Close();
throw new Exception();
}
}
}
}
catch (Exception ex)
{
//Throw an error if the number of attempts is equal to the number of configured retries
if (openAttempts == 20)
throw new Exception(ex.Message);
else
{
openAttempts += 1;
Thread.Sleep(1000); //Put the thread to sleep for the configured amount of time
ReadFile(filePath);
}
}
return fileText;
}
Тут все, и управление исключениями, и бессмысленная рекурсия, и глупые ошибки. Про то, что это можно было заменить на одну строчку я молчу даже.
В виндах тоже есть NFS?!!
В этот файл параллельно чтению могут записываться данные из другого места? Так как именно для такого сценария данный велосипед. ОП, поясни.
Во-первых, чтобы работать с fs ||, надо создавать его с флагом FileOptions.Asynchronous
Во-вторых, fileText = sr.ReadToEnd() - просто вызов синхронной операции, а асинхронная должна быть похожа на BeginRead или как то так
В-третьих: if (!sr.EndOfStream). Это могло ввести тебя в заблуждение из-за схожести с каким нибудь IsCompleted на инстансе IAsyncRezult, если показалось, что это "опрос". А если показалось, что это "ожидание завершения", то это должен был быть вызов метода, принимающего инстанс IAsyncRezult и отдающего строчку. Наверное. Это я про строчку :)
Маленький ликбез: в APM(асинхронус программинг модэл, простите меня за мой французский) бывает три типа стыковки: регулярный опрос, ожидание завершения и обратный вызов(именуемый как callback)
и вообще это свойство "в конце ли мой поинтер?", ессно что в конце и ничего не возбуждается в теле условия
Наверное надо пожелать автору удачи, точнее гудлака, он же eng-speaking guy ;)
PS: что-то не дают мне редактировать первое сообщение..