[C] Handle
Résolu/Fermé
A voir également:
- No server is available to handle this request traduction
- What is my movie français - Télécharger - Divers TV & Vidéo
- Traduction photo gratuit - Guide
- Qwerty to azerty - Guide
- Ps3 media server - Télécharger - Divers Réseau & Wi-Fi
- Traduction créole martinique français reverso ✓ - Forum Loisirs / Divertissements
9 réponses
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 4/10/2012 à 13:44
Modifié par [Dal] le 4/10/2012 à 13:44
Salut Saachaa,
Ton tableau db_files est un tableau de chaînes en C, qui contiennent le chemin de fichiers dans ton système de fichiers.
est donc inexact, même en faisant le cast que tu mets.
En Win32, tu dois, pour chaque fichier créer un Handle, qui te permet d'y accéder par l'intermédiaire de fonctions telles que GetFileSizeEx.
Tu peux créer ton Handle sur un fichier existant avec CreateFile et le flag OPEN_EXISTING.
Vois :
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea?redirectedfrom=MSDN
Dal
Ton tableau db_files est un tableau de chaînes en C, qui contiennent le chemin de fichiers dans ton système de fichiers.
HANDLE hFile; hFile = (HANDLE) db_files[i];
est donc inexact, même en faisant le cast que tu mets.
En Win32, tu dois, pour chaque fichier créer un Handle, qui te permet d'y accéder par l'intermédiaire de fonctions telles que GetFileSizeEx.
Tu peux créer ton Handle sur un fichier existant avec CreateFile et le flag OPEN_EXISTING.
Vois :
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea?redirectedfrom=MSDN
Dal
Utilisateur anonyme
4 oct. 2012 à 13:55
4 oct. 2012 à 13:55
Coucou Dal,
Merci de ta réponse,
J'ai bien essayé cela, mais malheureusement, la valeur retournée est (Null).
Merci de ta réponse,
J'ai bien essayé cela, mais malheureusement, la valeur retournée est (Null).
hFile = CreateFileA(db_files[i], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (GetFileTime(hFile, ftCreate, ftAccess, ftWrite) != 0) { fprintf(rapport, "[%s] : %s\n", ftAccess, db_files[i]); // Ici, le résultat dans le rapport est "[(null)]", que je mette ftCreate, ftAccess, ou ftWrite. } else { fprintf(rapport, "[error: %d] : %s\n", GetLastError(), db_files[i]); }
Utilisateur anonyme
4 oct. 2012 à 14:19
4 oct. 2012 à 14:19
Je pense que c'est à cause de la conversion et à force de recherche, je crois avoir trouvé, je te dis quoi ;-)
Utilisateur anonyme
4 oct. 2012 à 15:34
4 oct. 2012 à 15:34
Oui c'est bien, il faut convertir tout cela :
FileTimeToSystemTime(&ftWrite, &stUTC2); SystemTimeToTzSpecificLocalTime(NULL, &stUTC2, &stLocal2);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
4 oct. 2012 à 15:54
4 oct. 2012 à 15:54
Oups, juste une question,
Comment faire du GetFileTime() sur un dossier ?
J'ai vu sur un post que l'on devant utiliser :
FILE_FLAG_BACKUP_SEMANTICS
Mais avec ceci :
hFile = CreateFileA(db_folders[i], GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
Je peux aller me gratter :-O
Comment faire du GetFileTime() sur un dossier ?
J'ai vu sur un post que l'on devant utiliser :
FILE_FLAG_BACKUP_SEMANTICS
Mais avec ceci :
hFile = CreateFileA(db_folders[i], GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
Je peux aller me gratter :-O
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 5/10/2012 à 10:26
Modifié par [Dal] le 5/10/2012 à 10:26
Salut Saachaa,
Pour un répertoire, chez moi, ceci fonctionne pour obtenir un Handle sur un répertoire existant dans le but d'en lire les propriétés :
En passant, à chaque fois que tu essayes de créer un Handle, tu devrais tester s'il a bien été créé, et s'il ne l'a pas été, obtenir l'erreur signalée par le système. Cela aide vraiment :-)
Puis voir la liste des erreurs système : https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes?redirectedfrom=MSDN
Bon courage pour la suite !
Dal
Pour un répertoire, chez moi, ceci fonctionne pour obtenir un Handle sur un répertoire existant dans le but d'en lire les propriétés :
HANDLE hFile; char * a_directory = "C:\\Temp2"; hFile = CreateFile((LPCTSTR )a_directory, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
En passant, à chaque fois que tu essayes de créer un Handle, tu devrais tester s'il a bien été créé, et s'il ne l'a pas été, obtenir l'erreur signalée par le système. Cela aide vraiment :-)
if (hFile == INVALID_HANDLE_VALUE) { printf("Erreur : %x\n", (unsigned int)GetLastError()); exit(EXIT_FAILURE); }
Puis voir la liste des erreurs système : https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes?redirectedfrom=MSDN
Bon courage pour la suite !
Dal
Utilisateur anonyme
Modifié par Saachaa le 5/10/2012 à 13:20
Modifié par Saachaa le 5/10/2012 à 13:20
Coucou Dal,
Oui, c'est vrai que ça aide mais je n'y avais pas pensé.
http://puu.sh/1bB6z
Avec:
Là j'ai un peu l'air con:
ça aurait été l'erreur 3 encore plus :-S
♪♪ Slowin' Cleaner development, Windows Optimizer ♫
Oui, c'est vrai que ça aide mais je n'y avais pas pensé.
http://puu.sh/1bB6z
Avec:
hFile = CreateFile((LPCTSTR) db_folders[i], 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (hFile == INVALID_HANDLE_VALUE) { printf("Erreur : %x\n", (unsigned int)GetLastError()); printf("%s\n", db_folders[i]); system("pause"); //exit(EXIT_FAILURE); }
Là j'ai un peu l'air con:
ERROR_FILE_NOT_FOUND 2 (0x2) The system cannot find the file specified.
ça aurait été l'erreur 3 encore plus :-S
♪♪ Slowin' Cleaner development, Windows Optimizer ♫
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
5 oct. 2012 à 14:51
5 oct. 2012 à 14:51
:-)
Si tu as mis un (double) antislash à la fin du nom du répertoire, retire les.
Comme dans l'exemple :
Dal
Si tu as mis un (double) antislash à la fin du nom du répertoire, retire les.
Comme dans l'exemple :
char * a_directory = "C:\\Temp2";
Dal
Utilisateur anonyme
5 oct. 2012 à 15:17
5 oct. 2012 à 15:17
Comment cela ?
Si je l'enlève, aucun Slash n'apparaît !
Voilà le code, si ça peut t'aider :-)
Si je l'enlève, aucun Slash n'apparaît !
Voilà le code, si ça peut t'aider :-)
#define size_folders 2 char * db_folders [size_folders] = {"C:\\Windows", "C:\\ebejbfefl"}; for (i = 0 ; i < size_folders ; i++) { if (_access(db_folders[i], 0) != -1) { hFile = CreateFile((LPCTSTR) db_folders[i], 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (hFile == INVALID_HANDLE_VALUE) { printf("Erreur : %x\n", (unsigned int)GetLastError()); // erreur 2, pourtant le fichier existe (voir _access) printf("%s\n", db_folders[i]); system("pause"); //exit(EXIT_FAILURE); } if (GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite)) { FileTimeToSystemTime(&ftCreate, &stUTC); // Convert the created time to local time. set +1 SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal); fprintf(rapport, "[%02d/%02d/%d %02d:%02d] - %s\n", stLocal.wDay, stLocal.wMonth, stLocal.wYear, stLocal.wHour, stLocal.wMinute, db_files[i]); } }
Utilisateur anonyme
11 oct. 2012 à 00:04
11 oct. 2012 à 00:04
J'ai réussi à créer tout cela,
Le code d'erreur retourné était causé car le dossier était 'utilisé".
;-)
Le code d'erreur retourné était causé car le dossier était 'utilisé".
;-)
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
11 oct. 2012 à 09:55
11 oct. 2012 à 09:55
Content que cela fonctionne, Saachaa... des fois, il faut un peu de magie noire pour faire marcher les fonctions système de Windows ;-)
Dal
Dal