Sfârșitul scrierii în fișier

Sfârșitul scrierii în fișier

Alo
spuneți-i pe cineva cum să determine că fișierul este complet scris și nu este folosit de nimeni altcineva?
există un astfel de ref. cod:
Salvarea procedurii;
var ini: TINIFil;
f: fișierul Byte;
începe
ini: = TINIFile.Create ("log.ini");
ini.WriteString ("principal", "cale", ExtractFilePath (ParamStr (0)));
ini.WriteString ("principal", "program", ExtractFilename (ParamStr (0)));
.

.
ini.Free;
Atribuiți fișierul (f, "log.ini");
resetați (f); // aici și jamb :( deoarece dimensiunea fișierului = 0 până la 15 octeți


și anume în Windows 98 (pentru XP totul este bine) fișierul nu este finalizat după apelul metodei libere pentru obiectul ini.
cum să determinați că procesul de scriere este complet.

este mai ușor, aparent, să încercați să deschideți în modul exclusiv.

cum se deschide în modul exclusiv?

De exemplu, constantele modului FileOpen și fișierul deschis

idle :(
deschis în fmShareExclusive deschide încă un fișier de sistem neterminat

Puteți să terminați toate operațiile și să închideți fișierul printr-o operație simplă:
dacă renamefile ("log.ini", "log.ini") atunci <процесс записи завершен>

cu siguranță! a câștigat :)
dar, în principiu, rămâne întrebarea: cum determinați cu adevărat ce fișier este, de exemplu, deschis de un alt program, de fapt este finalizat până la sfârșit?

cereți un alt program

>> Palladin
foarte inteligent,
doar pot fi tăiate.
Și cum. nu podskazhesh. cu cunoștințe

>> Verg
idle :(
Am încercat să pun într-o buclă în timp ce renameFile ("log.ini", "log.ini") nu r: sin (0.33323);
oricum, programul deschide un fișier necompletat.

poate fi ca și cum ați putea apela funcția sistemului, resetați tampoanele de fișiere pe disc sau ceva în acest spirit.

și UpdateFile, în opinia dvs., ce face?

UpdateFile este dacă l-am deschis eu personal :)
dar, de exemplu, sistemul are două programe, dintre care unul scrie într-un fișier, iar celălalt citește din el, apoi UpdateFile nu funcționează

dar nu glumea, unde e amuzant?


> în timp ce nu renameFile ("log.ini", "log.ini") nu r: sin = (0.33323);

În primul rând, astfel de cicluri nu sunt recomandate,
în timp ce renameFile ("log.ini", "log.ini") nu face somn (0);

În al doilea rând, totul depinde de modul în care exact celălalt program scrie fișierul, adică Dacă, de exemplu, acesta se deschide fișierul - kusok- închide adaugă fișierul, și atât de multe ori după cum consideră potrivit, nu există nici o modalitate de a determina dacă acesta este terminat de scris tot ceea ce ea a vrut sau nu.

Dacă, totuși, înregistrarea are loc prin principiul deschiderii unui fișier înregistrat, tot ceea ce dorea - a închis fișierul, apoi combinația
în timp ce nu (file exists (fname) și renamefile (fname, fname)) face somn (0) (puteți utiliza, de asemenea, aplicațieprocesmesaje);

determină finalizarea scrierii la fișier și stopudovo de închidere.

>> Palladin
Pur și simplu "răspunsul" dvs. greșește cu informativitate, oricum că la întrebarea "unde locuiți?" Ai răspunde "în oraș" :)

snake1977 # 032; (14/05/2003 10:49)
Și ce raspuns este interesat - o planetă, o țară, un oraș, o stradă, un apartament sau altceva.
Răspunsul la această întrebare este cunoscut numai de program, angajat în înregistrare. Este normal ca un mediu multi-program să nu utilizeze o resursă mai lungă decât una plictisitoare.

>> Palladin
.
>>. întrebarea ar suna diferit "cum organizez transferul de date între cele două programe", vi se vor oferi multe alte opțiuni

dacă ar fi două dintre programele mele, atunci întrebarea nu ar fi apărut :)

>> 1 așteptați până când fișierul este închis
cum să aflăm că celălalt program la închis.
și cum să aflăm că toate tampoanele din acest fișier sunt scrise pe disc.

>> 3 dacă brusc, probabil, printr-un fluke, prin bunătatea programatorilor care l-au scris.
el înțelege aceste nesiguranțe aleatoare :)


> cum să afli că celălalt program la închis.

Încercați să deschideți modul de înregistrare și aflați cum să procedați


> și cum să aflăm că toate tampoanele din acest fișier sunt scrise pe disc.

nici un fel

snake1977 # 032; (14/05/03 11:11)

>> 1 așteptați până când fișierul este închis
Acest lucru este mai bine, singura metodă de a deschide exclusiv.

>> Anatoly Podgorețki
deja a încercat :)
snake1977 (14/05/03 09:29)
idle :(
deschis în fmShareExclusive deschide încă un fișier de sistem neterminat

Încercat și fmShareExclusive sau fmOpenRead
totul este bine, dar dimensiunea = 0
:(

>> Anatoly Podgorețki
Faptul este că un alt program ar putea să-l deschidă după cum doriți, inclusiv permițându-i să citească și să scrie :)

apoi numai a doua opțiune, cu așteptarea unei schimbări

Articole similare