begin process at 2012 05 30 15:17:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Fichier & Disque

 > 

Répertoire et sous répertoire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Répertoire et sous répertoire

lundi 13 octobre 2008 à 16:53:47 | Répertoire et sous répertoire

afavre69

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.

Voici mon code :

int

CreateDir(TCHAR *rep)

{

HANDLE hdl ;
TCHAR tmp[MAX_PATH];
TCHAR *p;

if ((hdl = CreateFile(rep, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, NULL)) == INVALID_HANDLE_VALUE)
MessageBox(NULL, rep, APPNAME, MB_OK);
{
// le directory n'existe pas, on essaye de le créer
if (CreateDirectory(rep, NULL) == FALSE)
{
// echec de la création, on teste pour savoir si le père existe
ZeroMemory(tmp, MAX_PATH);
p = StrRChr(rep,NULL,
'\\');
if (p != NULL)
StrNCpy(tmp, rep, p - rep +1);
else
{
wsprintf(tmp,L
"Impossible1 de créer %s", rep);
MessageBox(NULL, tmp, APPNAME, MB_OK);
return 0;
}
if (CreateDir(tmp) != 0)
{
if (CreateDirectory(rep, NULL) == FALSE)
{
wsprintf(tmp, L
"Impossible de créer %s", rep);
MessageBox(NULL, tmp, APPNAME, MB_OK);
return 0;
}
return 1;
}
// echec création
return 0;
}
// création réussie
return 1;
}
// le répertoire existe déjà, pas la peine de le créer
return 2;
}

et appel de la fonction:

StrCpy(v->szPassDescr,v->bDebugTest?L"Testing":LS("IDS_USBTRANSFERT",APPNAME));
SetDlgItemText(hWnd,IDC_ACTIONSTATUS,v->szPassDescr);
lTotEntries = ListView_GetItemCount(hLV) - 1;
SendDlgItemMessage(hWnd,IDC_PROGRESS,PBM_SETRANGE32,0,lTotEntries);
for ( i=0; i < lTotEntries; i++ ) {
wsprintf(szDest,L"%c:",v->szDrive[0]);
ListView_GetItemText(hLV,i,0,szSource,MAX_PATH);
ListView_GetItemText(hLV,i,1,szBuff,MAX_PATH);
StrCat(szDest,szBuff);
GetFolderName(szDest,szFolder);
   if (CreateDir(szFolder) !=0)
   {
  SendDlgItemMessage(hWnd,IDC_PROGRESS,PBM_SETPOS,i,0);
  wsprintf(szBuf,L"%2d %%",(i*100)/lTotEntries);
  SetDlgItemText(hWnd,IDC_PERC,szBuf);
  CopyUsb(szSource,szDest);
  SetDlgItemText(hWnd,IDC_STATUS,szDest);
  }
  }
  StrCpy(v->szPassDescr,L"");
lundi 13 octobre 2008 à 20:18:05 | Re : Répertoire et sous répertoire

BruNews

Administrateur CodeS-SourceS

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.

ciao...
BruNews, MVP VC++



Cette discussion est classée dans : répertoire, hwnd, rep, tmp, if


Répondre à ce message

Sujets en rapport avec ce message

Affichage des répertoires sous windows [ par VTS_35 ] Bonjour, j'ai un petit prrblème de gestion des répertoires. Sous Linux, y'avait pas de problème, mais là, je suis obligé de taffer sous windows et C l SHBrowseForFolder() [ par LordBob ] Salut a tous, voila une fonction que j'ai écrite, qui permet de selectionner un répertoire: // fonction qui permet de sélectionner un dossier char *O Impossible de créer un répertoire sous Windows [ par JejeLand ] Salut,Drôle de problème, j' essai de créer un rep nommé "aux" sous windows (XP ou Vista) mais impossible quelque soit l' endroit où je le crée.J'ai fa Lecture d'un fichier txt [ par Darklecon ] Chers amis de la troisième lettre de l'alphabet bonjour, J'ai écrit une petite fonction, copy_rep, permettant de copier un répertoire temp vers un aidez moi svp [ par romain4700 ] salut tou le monde romain 19ans debutans c++ avec devc++ et microsoft visual c++ jai un problem je ne sais pas comment fair pour inseret un image dan Convertir VB6 en C++ [ par Tybbow ] Bonjour, j'aimerais convertir un code créé en VB6 vers le C++, malheureusement, je n'y connais rien en C++, j'ai essayé de trouver des logiciels, mais Erreur de segmentation : à cause d'un strcmp() [ par tibs624 ] Tout est dit dans le titre à la compilation aucun problème mais lors de l'exécution de mon programme. Je vous met le code et les explications. Ce code Fenetre au premier plan [ par SnOOpss ] Bonjour suite a mon probleme de capture d'ecran on resolu (cf http://www.cppfrance.com/forum.v2.aspx?ID=631298) j'ai essayé de prendre mon probleme au Ameliorer code (msg.message==WM_KEYDOWN...) [ par Booster ] Bonjour à tous,Dans un sousi de rendre mon code le plus lisible possible j'aimerais savoir s'il n'y à pas une façons plus charmante, plus courte de co


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,976 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales