Я работаю с boost-файловой системой для поиска всех файлов по конкретному пути. Я также хочу получить данные о создании этого файла, его последнем открытии и последнем обновлении, поэтому, поскольку я работаю в Windows, мне нужно использовать GetFileTime (для которого требуется HANDLE, который я буду получить с помощью функции CreateFile.
Дело в том, что при ускорении файловой системы я получаю такую строку, как
строка filename = "C: \ Users \ MyUser \ Desktop \ PDN.pdf";
и мне нужно преобразовать эту строку в LPCWSTR.
Из-за этого я сделал несколько попыток, но все они потерпели неудачу, например:
HANDLE hFile = CreateFile((LPCWSTR)fileName.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
Но при этом удалось:
HANDLE hFile = CreateFile(L"C:\\Users\\MyUSer\\Desktop\\PDN.pdf", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
Итак, мой вопрос: как я могу разобрать строку в PWSTR, используя строковую переменную? И если возможно (думаю, нет), есть ли какая-либо функция, которая изменит исходный путь, добавив косую черту, где находит другую косую черту?
Большое спасибо
ИЗМЕНИТЬ: Я сделал это после того, что прочитал здесь:
wstring fileFullPathWstring = winAPII.stringToWstring (iter-> путь (). строка ());
HANDLE hFile = CreateFile (fileFullPathWstring.c_str (), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
Используя функцию:
wstring WinAPIIteraction::stringToWstring(string stringName){
int len;
int slength = (int)stringName.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, stringName.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, stringName.c_str(), slength, buf, len);
std::wstring r(buf);
delete[] buf;
return r;
}
string
скорее будетLPCSTR
,wstring
будетLPCWSTR
- это смесь UNICODE и ANSI. Лучше быть последовательным. - person Roger Rowland   schedule 17.12.2013