- 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;
}
Тут все, и управление исключениями, и бессмысленная рекурсия, и глупые ошибки. Про то, что это можно было заменить на одну строчку я молчу даже.
Eugene 10.06.2011 15:37 # 0
Jabberwok 10.06.2011 15:44 # 0
Lure Of Chaos 10.06.2011 16:55 # +1
SmackMyBitchUp 10.06.2011 17:22 # 0
Dummy00001 10.06.2011 17:54 # 0
В виндах тоже есть NFS?!!
koodeer 10.06.2011 21:17 # 0
В этот файл параллельно чтению могут записываться данные из другого места? Так как именно для такого сценария данный велосипед. ОП, поясни.
Jabberwok 13.06.2011 16:01 # +1
GeaR 17.06.2011 03:02 # 0
Во-первых, чтобы работать с fs ||, надо создавать его с флагом FileOptions.Asynchronous
Во-вторых, fileText = sr.ReadToEnd() - просто вызов синхронной операции, а асинхронная должна быть похожа на BeginRead или как то так
В-третьих: if (!sr.EndOfStream). Это могло ввести тебя в заблуждение из-за схожести с каким нибудь IsCompleted на инстансе IAsyncRezult, если показалось, что это "опрос". А если показалось, что это "ожидание завершения", то это должен был быть вызов метода, принимающего инстанс IAsyncRezult и отдающего строчку. Наверное. Это я про строчку :)
Маленький ликбез: в APM(асинхронус программинг модэл, простите меня за мой французский) бывает три типа стыковки: регулярный опрос, ожидание завершения и обратный вызов(именуемый как callback)
GeaR 17.06.2011 03:13 # 0
и вообще это свойство "в конце ли мой поинтер?", ессно что в конце и ничего не возбуждается в теле условия
Наверное надо пожелать автору удачи, точнее гудлака, он же eng-speaking guy ;)
PS: что-то не дают мне редактировать первое сообщение..
Jabberwok 17.06.2011 12:37 # 0
guest8 08.04.2019 20:55 # −999
guest8 09.04.2019 18:04 # −999
bjbAMvU 25.08.2021 01:34 # 0