Как добиться правильного перечисления папок в C ++ - PullRequest
4 голосов
/ 28 июля 2010

include "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);
}

Мне нужно получить список папок в выводе, но он дает мне следующее:

.
.
f
f
f

На самом деле, мой список папок:

.
..
file1
file2
file3

Почему у меня только первая буква имени файла?Благодаря.

Ответы [ 3 ]

7 голосов
/ 28 июля 2010

Использование _tprintf(TEXT("%s\n"), FindFileData.cFileName).

В вашем случае FindFileData.cFileName имеет фактический тип wchar_t, поэтому с printf вы печатаете строку широких символов, как если бы она была ascii.

3 голосов
/ 28 июля 2010

Вы передаете TCHAR* функции, ожидающей char*.Если вы компилируете с TCHAR как wchar_t, каждый второй байт в строке будет 0, поэтому printf будет видеть каждый второй байт как завершающий ноль.

1 голос
/ 28 июля 2010

Используйте _tprintf или wprintf вместо printf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...