Cum să verificați corect un fișier pentru posibilitatea de ao deschide

cum să verificați corect fișierul pentru posibilitatea de ao deschide

Dragi maeștri, spune-mi cum să verificați corect fișierul pentru posibilitatea de ao deschide.

Situația este că pe unitatea de rețea există un fișier DBF, care este actualizat periodic de operatori.
Este necesar să verificați înainte de a apela BatchMove.Execute (pentru a fuziona o nouă versiune de la sine) pentru a verifica dacă este deschis în acest moment și dacă este gratuit.

Altfel, va fi analfabet.

gratuit: = adevărat;
încerca
# xA0; deschideți
exept
# xA0; free: = false
în cele din urmă
closefile

res: = CreateFile (nume fișier, GENERIC_READ sau GENERIC_WRITE, 0, zero, OPEN_EXISTING, 0, 0);
dacă nu res și (GetLastError = ERROR_SHARING_VIOLATION) atunci liber: = false;

Este necesar să verificați înainte de a apela BatchMove.Execute (pentru a fuziona o nouă versiune de la sine) pentru a verifica dacă este deschis în acest moment și dacă este gratuit.

Și cine a spus că, după executarea codului de verificare, fișierul va rămâne în aceeași stare?

Nu este necesar un cod de verificare deoarece nu răspunde la întrebarea adresată.

Ei bine, deci:
încercați să deschideți - cu excepția - în cele din urmă nu este potrivit pentru că, pentru a face ca BatchMove să nu deschidă neapărat un fișier.

Apoi, am simplificat să scriu că fișierul este actualizat de operatori, de fapt există subtilitate. Datele din DBF sunt "resetate" la un moment dat. Ie Îi sun pe operator, spun - "reinițializează-mi ultimele date." Ei au o bază pe FoxPro 2.5 (DOS) - sunt eliminați. Apoi, trebuie să-mi "vărs" acest lucru și să-l import în Firebird. (Toate acest katavasiya pentru că nu vreau să lucrez în FoxPro2.5)

Păi, scriu un program care să captureze automat acest moment de "abandonare a datelor" și să-l transfere singur.
Construiesc astfel:
1. verificarea datei fișierului DBF pe server și compararea acestuia cu data ultimului fișier
2. dacă datele sunt diferite, adică pe server mai târziu - apoi BathMove la sine (pentru viteză), bine și apoi de la sine deja în FB.

Ei bine, aici, în pp. 2 Trebuie să verific dacă fișierul este gratuit, adică Dacă meniul este legal (durează aproximativ 30 de secunde și dacă BatchMove începe în acel moment, atunci mă tem că FoxPro nu va înțelege acest lucru).

Din toate cele ce urmează - nu trebuie să deschid fișierul, trebuie doar să verific dacă poate fi deschis. Și nu deschis ca un fișier de bază de date, ci ca un fișier obișnuit. Cu alte cuvinte - asigurați-vă că în momentul în care fișierul nu este utilizat. Scopul este de a face ca BatchMove să fie garantată după finalizarea FoxPro. mama ei


> Din tot ce urmează - nu trebuie să deschid un dosar, am nevoie
> verificați dacă poate fi deschisă.

Acest lucru se poate face numai prin deschiderea acestuia
Sau scrieți un driver de sistem pentru fișiere de kernel. O vrei?

În FoxPro să se deschidă în modul exclusiv (la sau în sine pentru a încerca exclusiv)

Dar asta

> [6] / glokk # xA0; (02/09/04 11:59)
> pentru ca BatchMove să nu deschidă neapărat un fișier.

Nu am înțeles deloc
Cum "nu se deschide". Poate că nu în mod explicit, dar fișierul este deschis în orice caz, atunci când are loc lectura.
Așa că citiți Mâncătorul Reindeer Moss - scrie corect.

da da puncte peste e:
Nu o deschideți ca o tabelă de baze de date. și anume nu au nevoie de TTable.Open. Adică.
Ei bine, trebuie să deschideți fișierul .ess (dar ca fișier). Deci, aici este întrebarea - cum să o faceți competent. Și astfel, în cazul în care verificarea este efectuată în timpul "dumpingului de date", aceasta nu împiedică acest proces important.
încerca
# xA0; deschideți ->. # xA0;
cu excepția
în cele din urmă
se încheie;

P.S.
Mă gândesc să pun cecul în aplicația Application.OnIdle.

Da, apropo - verificarea datei fișierului, de asemenea, într-un mod similar ar trebui făcut. De asemenea, să nu intervină.

În general, cum se comportă toate acestea. în timp ce fișierul DBF este deschis ca tabelă de baze de date, acesta este accesat ca fișier obișnuit pentru citirea datei. Cunoștințele mele nu sunt suficiente pentru a răspunde la această întrebare, așa că m-am întors la tine și am întrebat-o

Nu doare
În general, aceasta nu intervine în nici un caz, cu excepția cazului în care este înregistrat un fișier
Și doar o încercare nereușită de a deschide - doar e interferează.

isDone: = FALSE; # xA0;
în timp ce NU este DoDone
încerca
# xA0; BatchMove;
# xA0; isDone: = TRUE;
cu excepția
se încheie;

> Mă gândesc să pun cecul în Application.OnIdle.

De o sută de ori se spune: NU VERIFICAȚI.
Este necesar să luați - și să faceți.

> [10] / glokk # xA0; (02/09/04 12:28)
> Da, apropo - verificarea datei fișierului, de asemenea, într-un mod similar ar trebui
> produse. De asemenea, să nu intervină.

Încă o dată: citirea și deschiderea fișierului în modul de citire nu împiedică pe nimeni. Ei bine, cu excepția unei descoperiri exclusive - aceasta, desigur, nu va permite nimănui să deschidă dosarul.

> În general, cum se comportă toate acestea. în timp ce dosarul
> DBF este deschis ca o tabelă de bază de date la care este accesat ca
> la fișierul obișnuit pentru citirea datei.

Pentru sistemul de fișiere, nu există nici o diferență că fișierul este deschis ca o tabelă de baze de date sau altceva. Pentru ea, toate fișierele sunt egale;)


> De exemplu. Îi sun pe operatorul, spun - "reinițializează-mi ultimele date."
> Ei au o bază pe FoxPro 2.5 (DOS) - ei dump

Și adăugați:
"Și apoi porniți utilitarul meu MyImportData.exe"

"Citirea și deschiderea fișierului în modul de citire nu împiedică pe nimeni".

înseamnă descoperirea unui tabel ca o bază de date sau un fișier.

"Fișierul a fost deschis ca un fișier" - a fost tradus.

> / glokk # xA0; (09/02/04, 13:00) [14]
> implică descoperirea AS a unei tabele de baze de date sau a unui fișier.

Nu am înțeles cuplul care a fost lovit în acest post, dar bine.
Răspunsul la întrebare este în post [12], ultimul rând

Fișier deschis / nedeschis DURING INSPECTION nu este același cu fișierul deschis / nedeschis în timpul importului de date.

Este ca și cum ai merge la magazin fără pungă pentru a te asigura că există bere acolo.
Apoi du-te înapoi pentru bani și du-te cumpăra acea bere.
Și are deja o urmă.

/ glokk # xA0; (02.09.04 11:59) [6]
Ie Îi sun pe operatorul, spun - "reinițializează-mi ultimele date." Ei au o bază pe FoxPro 2.5 (DOS) - sunt eliminați.

Apoi, operatorul govormt a renunțat și ți-ai făcut treaba, altfel nimic nu te va ajuta.