2010-07-28 4 views
4

comprennent "stdafx.h"

#include <windows.h> 
#include <tchar.h> 
#include <stdio.h> 

void _tmain(int argc, TCHAR *argv[]) 
{ 
    WIN32_FIND_DATA FindFileData; 
    HANDLE hFind; 
    printf ("Target file is %s.\n", argv[1]); 

    hFind = FindFirstFile(argv[1], &FindFileData); 
    if (hFind == INVALID_HANDLE_VALUE) 
    { 
     printf ("FindFirstFile failed (%d)\n", GetLastError()); 
     system("pause"); 
     return; 
    } 
    else 
    { 
    do 
      { 
      printf("%s\n",FindFileData.cFileName);    
      } 
    while (FindNextFile(hFind,&FindFileData)!=0); 
    FindClose(hFind); 
    } 
    system("pause"); 
    FindClose(hFind); 
} 

Je dois obtenir une liste de dossiers en sortie, mais il me donne ce qui suit:Comment atteindre dossier correct liste en C++

. 
. 
f 
f 
f 

En fait, ma liste de dossiers est:

. 
.. 
file1 
file2 
file3 

Pourquoi ai-je seulement la première lettre du nom de fichier? Merci.

+0

Pourquoi cela a-t-il une balise 'C++'? – sbi

+0

J'allais demander pourquoi il a la balise C, mais ce code est clairement C, pas C++. – nmichaels

Répondre

7

Utilisez _tprintf(TEXT("%s\n"), FindFileData.cFileName).

Dans votre cas FindFileData.cFileName est de type wchar_t, avec printf vous imprimez une chaîne de caractères large comme si elle était ASCII.

+0

Merci beaucoup à tous –

3

Vous passez un TCHAR* à une fonction qui attend un char*. Si vous compilez avec TCHAR en tant que wchar_t, tous les autres octets de la chaîne seront 0, donc printf verra tous les autres octets comme une valeur nulle finale.

+0

Et qu'est-ce que je dois faire? –

1

Utilisez _tprintf ou wprintf au lieu de printf.