Хотите прочитать файл в TStringList
-
22-07-2019 - |
Вопрос
Да, я хочу прочитать простой файл журнала в 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.
Есть предложения?
Решение
Попробуйте LoadFromStream и выполните что-то вроде:
fileStream := TFileStream.Create(aFileName, fmShareDenyNone);
myTStringList.LoadFromStream(fileStream);
fileStream.Free();
Другие советы
fmShareCompat, вероятно, должен быть помечен как устаревший. Вы хотите fmShareDenyNone (, как сказал Дрейц ) р>
fmShareCompat приходит с 16 дней DOS, я полагаю. В Windows он обрабатывается так же, как fmShareExclusive. Когда Linux поддерживался, он обрабатывался так же, как fmShareDenyNone. Р>
Кроме того, попробуй .. кроме и попробуй .. наконец, хорошие друзья в это время. Инкапсулируйте код чтения файлов в блоки этих типов и сообщите пользователю о возникшей проблеме.