Вопрос

Да, я хочу прочитать простой файл журнала в 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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top