Ho un problema che non riesco a spiegarmi:
il seguente codice C scandisce ricorsivamente un directory
stampando a video il nome, la dimensione e l'ora di modifica di tutti i files e sottodirectory contenuti nella directory di partenza.

Non riesco a capire perche' se durante lo sleep modifico un file non ancora letto il programma quando riprende (dopo lo sleep) non si accorge della variazione.
Ho aggiunto un ciclo for per ripetere l'operazione una seconda volta (vedi codice) ed al secondo passaggio il programma legge correttamente la variazione. E' normale oppure sbaglio in qualcosa, se cosi perche' la prima volta non viene letto l'aggiornamento?
Inoltre vorrei sapere perche' la trasformazione della SystemTime con la SystemTimeToFileTime mi carica nel buffer un dato FILETIME che non coincide con il numero di 100 nanosecondi a partire dal 1601 come dovrebbe essere, ma un numero piu' piccolo.

TKS
codice:
//*****************
Questo codice effettua la ricerca del file
o directory in modo ricorsivo nelle sottocartelle
******************/
#include <windows.h>
#include <stdio.h>
#include <string.h>

WIN32_FIND_DATA ricerca;
char path [256];
void search(char*);

void search(char *path)
	{

	union	{
			LONGLONG li;
			FILETIME ft;
			}lpft,diff,lpft1;

	SYSTEMTIME st;

	char path_cor [256];
	HANDLE h;
	chdir(path);

	GetSystemTime(&st);
	SystemTimeToFileTime(&st, &lpft.ft);
	printf("ora sistema in filetime %llu\n\n",lpft.li/10000000);
	int j;
	for(j=0; j<2;j++)
		{
		h = FindFirstFile("*.*", &ricerca);
		if (h != INVALID_HANDLE_VALUE)
			{
			do
				{
				strcpy(path_cor,path);
				if((ricerca.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) !=0)
					{
					if( !((strcmp(ricerca.cFileName,".") &&(strcmp(ricerca.cFileName,".."))) ) )
						{
						//printf ("DIR . or ..\n");
						}
					else
						{
						strcat(path_cor,ricerca.cFileName);
						strcat(path_cor,"\\");
						printf ("cart: %s\n",path_cor);
						lpft1.ft=ricerca.ftLastWriteTime;
						printf ("\ttempoinsecondi cartella: %llu\n\n",lpft1.li/10000000); // stampo il valore i secondi
						printf ("\ttempo trascorso: %llu\n\n",(lpft.li-lpft1.li)/10000000);
						search(path_cor);
						}
					}
				else
					{
						printf ("File: %s\n",strcat(path_cor,ricerca.cFileName));
						printf ("\tsize: %10d\n",ricerca.nFileSizeLow);
						printf ("aspetto.....\n");
						Sleep(10000);
						printf (".....riparto\n");
						lpft1.ft=ricerca.ftLastWriteTime;
						printf ("\ttempoinsecondi file: %llu\n\n",lpft1.li/10000000); // stampo il valore i secondi
						if(lpft.li < lpft1.li)
						printf ("\ttempo trascorso: %llu\n\n",(lpft1.li-lpft.li)/10000000);
					}
				}
			while (FindNextFile(h, &ricerca));
			}
		else
			{
				printf("Errore %d\n", GetLastError ());
			}
		FindClose(h);
		}
	}
	
int main()
	{
		char * path="C:\\Documents and Settings\\giancarlo\\Desktop\\PROVE\\";
		printf ("path di partenza %s\n\n",path);
		search(path);
		exit (0);
	}
Tks a lot