Vuoi leggere un file su un TStringList
-
22-07-2019 - |
Domanda
Sì, voglio leggere un semplice file di registro in un TStringList e questo è facile con LoadFromFile. Ma il problema è che il file può essere già aperto da un altro programma contemporaneamente, quindi potrebbe apparire un'eccezione. Ho provato a usare:
FileMode := fmShareCompat;
Ma non funzionerà.
Ho anche provato a usare:
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;
Genera un errore EInOutError con errore I / O messaggio 998.
Qualche suggerimento?
Soluzione
Prova LoadFromStream e fai qualcosa del tipo:
fileStream := TFileStream.Create(aFileName, fmShareDenyNone);
myTStringList.LoadFromStream(fileStream);
fileStream.Free();
Altri suggerimenti
fmShareCompat dovrebbe probabilmente essere contrassegnato come obsoleto. Vuoi fmShareDenyNone ( come diceva Drejc )
fmShareCompat proviene da 16 giorni di DOS credo. Su Windows, è trattato come fmShareExclusive. Quando Linux è stato supportato, è stato trattato come fmShareDenyNone.
Inoltre, prova..eccezione e prova..finalmente sono buoni amici in questi momenti. Incapsula il codice di lettura dei file in questi tipi di blocchi e informa l'utente sul problema che si presenta.