Как я могу решить эту ошибку? - PullRequest
5 голосов
/ 04 июля 2011
#include <windows.h>
#include <iostream>
using namespace std;
int main() {
char* file="d:/tester";
WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
hFind = FindFirstFile(file, &FindFileData);  // line of error says argument of type char* is incompatible with parameter of type LPCWSTR
}

Я не могу понять ошибку. Что это и как я могу решить эту ошибку?

Я создаю консольное приложение и мне нужно проверить, есть ли там файлы всправочник.

Ответы [ 3 ]

4 голосов
/ 04 июля 2011

тип LPCWSTR - это постоянный указатель на широкий символ

file в char* file="d:/tester"; - указатель на обычный символ

Обычный символ обычно использует 1 байт памятив то время как широкий символ обычно использует 2 байта.Что произойдет, если имя файла содержит буквы кириллицы или японские буквы?Вы не сможете открыть его без указания кодировки.Windows API принимает широкие символы для функции FindFirstFile, потому что имя файла может быть в Unicode.Таким образом, если вы напишите L"foo_bar", компилятор интерпретирует его как строку широких символов.Поэтому вы можете написать wchar_t* file = L"d:\\tester"; для соответствия типам параметров, чтобы компиляция прошла успешно.

1 голос
/ 04 июля 2011

Вы вызываете функцию, которая ожидает строку широких символов (FindFirstFileW). Вы либо меняете файл на wchar_t* file = L"d:\\tester";, либо используете ASCII-версию функции FindFirstFileA.

1 голос
/ 04 июля 2011

Вы компилируете с определенным UNICODE и в то же время передаете строку ANSI в качестве первого параметра.Замените вашу строку, что существа char * на

TCHAR * file = TEXT ("d: \ tester");

и все должно быть в порядке.

Мартын

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