WIN32_FIND_DATA Проблемы - cFileName - PullRequest
0 голосов
/ 14 октября 2010

у меня проблема с моим кодом;)

hFind = FindFirstFileEx( szPath, FindExInfoMaxInfoLevel, &FindData, FindExSearchNameMatch, NULL , 0);

strncpy_s( pszFileName, 280, FindData.cFileName, strlen(FindData.cFileName));

все выглядит нормально, но когда я копирую исполняемый файл на другой компьютер (windows 2003), я получаю, но для pszFileName я получаю действительно странный вывод

Ответы [ 3 ]

2 голосов
/ 14 октября 2010

Указание FindExInfoMaxInfoLevel неверно. Библиотека MSDN сообщает:

FindExInfoMaxInfoLevel

Это значение используется для проверки. Поддерживаемые значения меньше этого значения.

Кроме того, из вашего использования FindFirstFileEx я не понимаю, почему вы не используете более простую FindFirstFile функцию .

1 голос
/ 14 октября 2010

Недостаточно кода для диагностики проблемы, особенно без каких-либо доказательств проверки ошибок.Тем не менее, есть что-то действительно вонючее в том, что вы отправили.Ваш вызов strncpy_s () говорит, что pszFileName является указателем на массив с 280 элементами.Откуда взялся этот номер?Это просто предположение?Он никогда не может быть больше 260 в Windows, почему это больше?Я подозреваю, что когда вы сделаете это действительное число, как аргумент, переданный вашей функции, вместо предположения, что вы также исправите проблему.

0 голосов
/ 14 октября 2010

Вы не должны использовать поля вывода в FindData без предварительной проверки, что hFind допустимо.Из документов MSDN :

Если функция не может или не может найти файлы из строки поиска в параметре lpFileName, возвращаемое значение равно INVALID_HANDLE_VALUE, а содержимое lpFindFileData неопределенно.

Таким образом, вы должны иметь (после устранения других проблем в вызове API, описанных в ответах здесь):

hFind = FindFirstFileEx( szPath, /* replace FindExInfoMaxInfoLevel here */, 
    &FindData, FindExSearchNameMatch, NULL , 0);
if (hFind != INVALID_HANDLE_VALUE)
{
  strncpy_s( pszFileName, 280, FindData.cFileName, strlen(FindData.cFileName));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...