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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top