#include "stdafx.h"#include <string>
#include <windows.h>
using namespace std;
int main()
{
string FilePath = "C:\\Documents and Settings\\whatever";
CreateDirectory(FilePath, NULL);
return 0;
}
Ошибка: ошибка C2664: «CreateDirectory»: невозможно преобразовать параметр 1 из «const char *» в «LPCTSTR»
std::string
это класс, который содержит char
на основе данных. Пройти std::string
данные для функций API, вы должны использовать его c_str()
способ получить char*
указатель на фактические данные строки.
CreateDirectory()
занимает TCHAR*
в качестве ввода. Если UNICODE
определено, TCHAR
карты для wchar_t
в противном случае он отображается на char
вместо. Если вам нужно придерживаться std::string
но не хочу делать свой код UNICODE
-знай, потом используй CreateDirectoryA()
вместо этого, например:
#include "stdafx.h"#include <string>
#include <windows.h>
int main()
{
std::string FilePath = "C:\\Documents and Settings\\whatever";
CreateDirectoryA(FilePath.c_str(), NULL);
return 0;
}
Сделать этот код TCHAR
-назнаю, вы можете сделать это вместо:
#include "stdafx.h"#include <string>
#include <windows.h>
int main()
{
std::basic_string<TCHAR> FilePath = TEXT("C:\\Documents and Settings\\whatever");
CreateDirectory(FilePath.c_str(), NULL);
return 0;
}
Тем не менее, версии ОС на основе Ansi давно устарели, в настоящее время все Unicode. TCHAR
больше не должен использоваться в новом коде:
#include "stdafx.h"#include <string>
#include <windows.h>
int main()
{
std::wstring FilePath = L"C:\\Documents and Settings\\whatever";
CreateDirectoryW(FilePath.c_str(), NULL);
return 0;
}
Если вы не создаете исполняемый файл Unicode, вызов c_str()
на std :: string приведет к const char*
(известный как не Unicode LPCTSTR), который вы можете передать CreateDirectory
().
Код будет выглядеть так:
CreateDirectory(FilePath.c_str(), NULL):
Обратите внимание, что это приведет к ошибке компиляции, если вы попытаетесь создать исполняемый файл Unicode.
Если вам нужно добавить к FilePath
Я бы порекомендовал вам либо продолжать использовать std::string
или использовать Microsoft CString
делать манипуляции со строками, так как это менее болезненно, чем делать это способом C и манипулировать необработанным символом *. Лично я бы использовал std::string
если вы уже не в приложении MFC, которое использует CString.