afavre69
Messages postés6Date d'inscriptionsamedi 1 mars 2008StatutMembreDernière intervention13 octobre 2008
-
13 oct. 2008 à 16:53
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
13 oct. 2008 à 20:18
Bonjour à Tous,
J'ai un petit problème avec mon code...
Dans mon appli, j'ai une listview dasn laquelle se trouve des fichiers à copier sur clé usb. Je veux conserver la structure des fichiers, c'est dire dossier et sous dossier (exemple: \Dossier1\Dossier2\fichier1.doc )
Je fais appel a une fonction CreateDir();
Sous Vista, ça marche sans aucun problème, mais sous Windows XP, seul le dossier \Dossier1 est crée sur la racine de ma clè USB.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 13 oct. 2008 à 20:18
Où est le CloseHandle() si CreateFile() réussit ???
StrCpy(v->szPassDescr,L"");
v->szPassDescr[0] = 0; // IRA CERTAINEMENT AUSSI BIEN
ListView_GetItemText(hLV,i,0,szSource,MAX_PATH);
ListView_GetItemText(hLV,i,1,szBuff,MAX_PATH);
StrCat(szDest,szBuff);
ListView_GetItemText à remplacer par appel direct de LVM_GETITEMTEXT.
Tu auras ainsi le nbr de caractères copiés en retour, donc plus besoin de strcat().
Venons à ton prob de création de dossiers et sous dossiers:
TCHAR tmp[MAX_PATH], *c, a;
TCHAR drvdest[4];
disons que tu as le fullfilename dans tmp et "R:" dans drvdest:
Inutile de tester l'existence des dossiers (par GetFileAttributes() et non CreateFile()), appel direct de CreateDirectory() sera nettement plus rapide:
tmp[0] = drvdst[0];
c = tmp + 3; DERRIERE le "" racine
while(a = *c) {
if(a == '\\') {
*c = 0; // TRONQUE CHAINE PROVISOIREMENT
CreateDirectory(tmp, 0);
*c = a; // RESTAURE LA CHAINE
}
c++;
}
Ici fini, tu peux copier ton fichier.