- #include <windows.h>
-
- // ce handle permet d'écrire sur la console avec WriteConsole
- static HANDLE Console = NULL;
-
- // cette fonction est l'équivalent de printf, mais dans son cru Win32 (pas utile dans ce cas, mais pratique pour les MessageBox d'erreur ou autres)
- VOID print(PTSTR Format, ...) {
- va_list Arguments;
- va_start(Arguments, Format);
- PTSTR Message = NULL;
- // cette ligne fait tout le boulot : FormatMessage alloue un buffer dans lequel il formate le message, et WriteConsole l'affiche ensuite
- WriteConsole(Console, Message, FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, Format, 0, 0, (PTSTR) &Message, 0, &Arguments), NULL, NULL);
- // en revanche, c'est à nous de libérer la mémoire ensuite (logique)
- LocalFree(Message);
- va_end(Arguments);
- }
-
- // est-ce que décrire cette fonction est encore utile ?
- INT main(VOID) {
- // on récupère le handle de notre console
- Console = GetStdHandle(STD_OUTPUT_HANDLE);
- SYSTEMTIME SystemTime;
- // on récupère la date et l'heure courante du système...
- GetSystemTime(&SystemTime);
- FILETIME FileTime;
- // ...et on les convertit en date et heure de fichiers
- SystemTimeToFileTime(&SystemTime, &FileTime);
- WIN32_FIND_DATA Fichier;
- // on chercher tous les fichiers dans le dossier courant
- HANDLE Dossier = FindFirstFile("*.*", &Fichier);
- // y'a pas de fichiers ? ben on arrête ici...
- if (Dossier == INVALID_HANDLE_VALUE) return 0;
- do {
- // on saute les dossiers (on peut assez facilement rendre le programme récursif, mais ce n'était pas mon but)
- if ((Fichier.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) continue;
- // on affiche le nom du fichier qu'on s'apprête à modifier (notez la mise en forme, qui est évidemment celle de FormatMessage)
- print("`%1!s!' ... ", Fichier.cFileName);
- // on ouvre le fichier (pour en modifier la date, nous devons avoir un handle sur le fichier)
- HANDLE f = CreateFile(Fichier.cFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- // en cas d'erreur, on affiche l'échec et on passe au fichier suivant
- if (f != INVALID_HANDLE_VALUE) {
- // sinon, on essaie de mofidier la date et on indique le résultat final de l'opération
- print((SetFileTime(f, &FileTime, &FileTime, &FileTime) != 0) ? "success%n" : "failure%n");
- // et évidemment, on pense à fermer le fichier !
- CloseHandle(f);
- } else print("failure%n");
- // et on refait toute l'opération tant qu'il reste des fichiers
- } while (FindNextFile(Dossier, &Fichier) != 0);
- // fin
- FindClose(Dossier);
- return 0;
- }
#include <windows.h>
// ce handle permet d'écrire sur la console avec WriteConsole
static HANDLE Console = NULL;
// cette fonction est l'équivalent de printf, mais dans son cru Win32 (pas utile dans ce cas, mais pratique pour les MessageBox d'erreur ou autres)
VOID print(PTSTR Format, ...) {
va_list Arguments;
va_start(Arguments, Format);
PTSTR Message = NULL;
// cette ligne fait tout le boulot : FormatMessage alloue un buffer dans lequel il formate le message, et WriteConsole l'affiche ensuite
WriteConsole(Console, Message, FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, Format, 0, 0, (PTSTR) &Message, 0, &Arguments), NULL, NULL);
// en revanche, c'est à nous de libérer la mémoire ensuite (logique)
LocalFree(Message);
va_end(Arguments);
}
// est-ce que décrire cette fonction est encore utile ?
INT main(VOID) {
// on récupère le handle de notre console
Console = GetStdHandle(STD_OUTPUT_HANDLE);
SYSTEMTIME SystemTime;
// on récupère la date et l'heure courante du système...
GetSystemTime(&SystemTime);
FILETIME FileTime;
// ...et on les convertit en date et heure de fichiers
SystemTimeToFileTime(&SystemTime, &FileTime);
WIN32_FIND_DATA Fichier;
// on chercher tous les fichiers dans le dossier courant
HANDLE Dossier = FindFirstFile("*.*", &Fichier);
// y'a pas de fichiers ? ben on arrête ici...
if (Dossier == INVALID_HANDLE_VALUE) return 0;
do {
// on saute les dossiers (on peut assez facilement rendre le programme récursif, mais ce n'était pas mon but)
if ((Fichier.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) continue;
// on affiche le nom du fichier qu'on s'apprête à modifier (notez la mise en forme, qui est évidemment celle de FormatMessage)
print("`%1!s!' ... ", Fichier.cFileName);
// on ouvre le fichier (pour en modifier la date, nous devons avoir un handle sur le fichier)
HANDLE f = CreateFile(Fichier.cFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// en cas d'erreur, on affiche l'échec et on passe au fichier suivant
if (f != INVALID_HANDLE_VALUE) {
// sinon, on essaie de mofidier la date et on indique le résultat final de l'opération
print((SetFileTime(f, &FileTime, &FileTime, &FileTime) != 0) ? "success%n" : "failure%n");
// et évidemment, on pense à fermer le fichier !
CloseHandle(f);
} else print("failure%n");
// et on refait toute l'opération tant qu'il reste des fichiers
} while (FindNextFile(Dossier, &Fichier) != 0);
// fin
FindClose(Dossier);
return 0;
}