Хотите прочитать файл в TStringList - PullRequest
2 голосов
/ 15 января 2009

Да, я хочу прочитать простой файл журнала в TStringList, и это легко сделать с помощью LoadFromFile. Но проблема в том, что файл может быть одновременно открыт другой программой, поэтому может появиться исключение. Я пытался использовать:

FileMode := fmShareCompat;

Но это не сработает.

Я также пытался использовать:

fFilePath := fPathList[PathIndex] + '\' + FileData.Name;
AssignFile(vFile, fFilePath);
Reset(vFile, 1);  // Recordsize = 1

SetLength(vFileString, FileData.Size);
BlockRead(vFile, vFileString, FileData.Size);   
vCurrentFile.Text := vFileString;

Вызывает EInOutError с ошибкой ввода-вывода сообщения 998.

Есть предложения?

Ответы [ 3 ]

13 голосов
/ 15 января 2009

Попробуйте LoadFromStream и сделайте что-то вроде:

fileStream := TFileStream.Create(aFileName, fmShareDenyNone);
myTStringList.LoadFromStream(fileStream);
fileStream.Free();
4 голосов
/ 15 января 2009

fmShareCompat, вероятно, следует пометить как устаревший. Вы хотите fmShareDenyNone (, как сказал Дрейц )

fmShareCompat приходит с 16 дней DOS, я полагаю. В Windows он обрабатывается так же, как fmShareExclusive. Когда Linux поддерживался, он обрабатывался так же, как fmShareDenyNone.

1 голос
/ 15 января 2009

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

...