Pracuję nad programem C, w którym potrzebuję uzyskać czas ostatniej modyfikacji pliku. Program wykonuje pętle przez każdy plik w katalogu i po znalezieniu konkretnego pliku wywołuje inną funkcję w celu sprawdzenia ostatnich czasów modyfikacji pliku.Pobierz ostatni czas modyfikacji pliku w Linuksie
W katalogu znajduje się mylog.txt.1
, mylog.txt.2
i mylog.txt.3
itd. Kiedy listy katalogu w systemie Linux za pomocą komendy LL widzę, że mylog.txt.1
i mylog.txt.2
zostały zmodyfikowane w dniu 4 maja i mylog.txt.3
został zmodyfikowany na 3 maja.
Gdy program sprawdza każdy z tych plików, jednak zawsze zwraca 3 maja. Poniżej znajduje się kod, którego używam.
void getFileCreationTime(char *filePath)
{
struct stat attrib;
stat(filePath, &attrib);
char date[10];
strftime(date, 10, "%d-%m-%y", gmtime(&(attrib.st_ctime)));
printf("The file %s was last modified at %s\n", filePath, date);
date[0] = 0;
}
Próbowałem wszystkie różne odmiany st_ctime
, tj st_mtime
i st_atime
ale wszyscy 3-sze powrót może.
Dziękujemy za pomoc.
może porządki najpierw: dlaczego zdać rozmiaru 20 do 'strftime' gdy bufor jest 10 długo? dlaczego nie sprawdzić zwracanej wartości 'stat'? Jeśli 'stat' nie powiedzie się, parsujesz wartość śmieci. – mvds
@mvds przykro nam, że był to typo – Boardy
upewnij się, że przechodzisz inną ścieżkę, także "attrib.st_ctime" da "czas ostatniej zmiany statusu", jeśli szukasz "czasu ostatniej modyfikacji" musisz użyć " attrib.st_mtime " – ray