Dateiverwaltung: erkennen, ob eine Datei fertig kopiert worden ist
-
Hallo@all
Ich will eine Datei im Verzeichnis WINDOWS\SPOOL\PRINTERS\ die über das Netztwerk kopiert wird erkennen und weiterbearbeiten.
Mit findfirst finde ich die Datei bereits, siehe Code unten.
Das Problem:
findfirst zeigt die Datei bereits zu beginn des Kopiervorgangs an :-((Mit welcher Funktion erkenne ich, ob die Datei bereits fertig kopiert worden ist ?
Damit ich mit der Datei arbeiten kann?//--------------------------------------------------------------------------- #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused #include <dir.h> //int findfirst(const char *pathname, struct ffblk *ffblk, int attrib); int haltepunkt=1; int main() { struct ffblk f; int done = findfirst("\\WINDOWS\\SPOOL\\PRINTERS\\*.*", &f, FA_SYSTEM); while (!done) { printf("%10u %2u:%02u:%02u %2u/%02u/%4u %s\n", f.ff_fsize, (f.ff_ftime >> 11) & 0x1f, (f.ff_ftime >> 5) & 0x3f, (f.ff_ftime & 0x1f) * 2, (f.ff_fdate >> 5) & 0x0f, (f.ff_fdate & 0x1f), ((f.ff_fdate >> 9) & 0x7f) + 1980, f.ff_name); done = findnext(&f); } return 0; } //---------------------------------------------------------------------------
-
Ich bin mir nicht sicher, aber während des Kopierens sollte das andere Programm exklusiven Zugriff auf die Datei bestellt haben - das würde bedeuten, daß ein fopen() scheitern sollte, wenn du die Datei zu öffnen versuchst, bevor sie bereit ist:
FILE* f; do f=fopen(datei,"r"); while(f!=NULL);
-
ich haette den thread nicht ohne was zu sagen verschieben duerfen. sorry deswegen.
da ist der originalthread: http://www.c-plusplus.net/forum/viewtopic-var-t-is-134600.html
-
Hallo,
ich habs jetzt raus :-))
Also f.ff_fsize liefert während des Kopiervorgangs den Wert 0 und ers am Ende des Kopiervorgangs die Dateigröße.
Ich prüfe also so lange mit findfirst, bis f.ff_fsize nicht mehr 0 ist
do{
done = findfirst("\\WINDOWS\\SPOOL\\PRINTERS\*.spl", &f, FA_SYSTEM);}while ((done==-1)||f.ff_fsize<=0);
void suche_job() { int done=-1; struct ffblk f; do{ // pause(2); done = findfirst("\\WINDOWS\\SPOOL\\PRINTERS\\*.spl", &f, FA_SYSTEM); }while ((done==-1)||f.ff_fsize<=0); strcat (spl_file,f.ff_name); strcpy(printjob,"\\WINDOWS\\SPOOL\\PRINTERS\\"); strcat(printjob,spl_file); strcpy(shdfile,spl_file); shdfile[6]='s'; shdfile[7]='h'; shdfile[8]='d'; strcpy(dummy,shdfile); strcpy(shdfile,"\\WINDOWS\\SPOOL\\PRINTERS\\"); strcat(shdfile,dummy); do{ splFile = fopen (printjob,"r"); if (splFile!=NULL) { fclose (splFile); } pause(5); }while(splFile==NULL); }