Mettre attributs à un fichier
Résolu/Fermé
A voir également:
- Mettre attributs à un fichier
- Fichier rar - Guide
- Fichier host - Guide
- Fichier iso - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
4 réponses
[Dal]
Messages postés
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
Modifié par [Dal] le 16/01/2017 à 13:15
Modifié par [Dal] le 16/01/2017 à 13:15
Salut,
Ce n'est pas vraiment du C++, c'est juste une fonction de l'API Windows.
En voilà la documentation :
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-setfileattributesa?redirectedfrom=MSDN
et voilà un exemple, où des fichiers sont mis en lecture seule, s'ils ne le sont pas déjà :
https://docs.microsoft.com/en-us/windows/win32/fileio/retrieving-and-changing-file-attributes?redirectedfrom=MSDN
dans la partie correspondant au code suivant :
cela serait bien aussi de vérifier la valeur renvoyée par la fonction, pour savoir si l'opération a pu être effectuée (ce que ne fait pas ce code d'exemple).
Dal
Ce n'est pas vraiment du C++, c'est juste une fonction de l'API Windows.
En voilà la documentation :
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-setfileattributesa?redirectedfrom=MSDN
et voilà un exemple, où des fichiers sont mis en lecture seule, s'ils ne le sont pas déjà :
https://docs.microsoft.com/en-us/windows/win32/fileio/retrieving-and-changing-file-attributes?redirectedfrom=MSDN
dans la partie correspondant au code suivant :
dwAttrs = GetFileAttributes(FileData.cFileName); if (dwAttrs==INVALID_FILE_ATTRIBUTES) return; if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) { SetFileAttributes(szNewPath, dwAttrs | FILE_ATTRIBUTE_READONLY); }
cela serait bien aussi de vérifier la valeur renvoyée par la fonction, pour savoir si l'opération a pu être effectuée (ce que ne fait pas ce code d'exemple).
Dal
system ("attrib +r c:\\dev-cpp\\toustou\\tousc7\\essailec.rtf");
fonctionne très bien.
string ficA="essailec.rtf";
system ("attrib +r c:\\dev-cpp\\toustou\\tousc7\\ficA");
ne compile pas.
Où est l'erreur?
fonctionne très bien.
string ficA="essailec.rtf";
system ("attrib +r c:\\dev-cpp\\toustou\\tousc7\\ficA");
ne compile pas.
Où est l'erreur?
[Dal]
Messages postés
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
16 janv. 2017 à 21:52
16 janv. 2017 à 21:52
ta variable est dans ton littéral, tu ne risques pas d'obtenir grand chose.
Tu concatènes deux string C++ avec
En utilisant system, tu perds alors le contrôle que te donne SetFileAttributes, sans compter que si un gugus te met un programme "attrib" qui fait des choses merveilleuses, tu vas avoir des surprises.
c'est toi qui vois.
Tu concatènes deux string C++ avec
+, mais comme system fait partie de la bibliothèque C, tu dois lui passer un pointeur sur char, et tu dois donc convertir la string avec la méthode
.c_str()de je suppose qu'en C++ on devrait faire comme cela :
system (("attrib +r c:\\dev-cpp\\toustou\\tousc7\\" + ficA).c_str());
En utilisant system, tu perds alors le contrôle que te donne SetFileAttributes, sans compter que si un gugus te met un programme "attrib" qui fait des choses merveilleuses, tu vas avoir des surprises.
c'est toi qui vois.
Je pense utiliser un fichier batch et une ligne de commande.
[Dal]
Messages postés
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
Modifié par [Dal] le 16/01/2017 à 21:53
Modifié par [Dal] le 16/01/2017 à 21:53
tu changes 3 fois d'avis en 3 posts. Bravo !