任何人都可以告诉我为什么它不会在Documents文件夹中创建´´´test.bat´´´
?我使用HRESULT hr = SHGetKnownFolderPath(FOLDERID_Documents, 0, NULL, &path);
来查找Documents文件夹的路径。然后将\\test.bat
添加到其中。当我将CreateFile(filePath,
更改为CreateFile(L"Path to documents",
时,会创建文件。
#include <iostream>
#include <string>
#include <Windows.h>
#include <fstream>
#include <KnownFolders.h>
#include <wchar.h>
#include <ShlObj.h>
#include <atlstr.h>
using namespace std;
int main()
{
char str[] = "@echo off\n echo Hello\n pause";
DWORD dwBytesToWrite = (DWORD)strlen(str);
DWORD dwBytesRead;
char buff[4096];
PWSTR path = NULL;
DWORD dwBytesWritten = 0;
HRESULT hr = SHGetKnownFolderPath(FOLDERID_Documents, 0, NULL, &path);
string pathStart = CW2A(path);
string file = pathStart + "\\test.bat";
LPCWSTR filePath;
filePath = (LPCWSTR)file.c_str();
if (SUCCEEDED(hr))
{
//cout << file << endl;
HANDLE mFile = CreateFile(filePath, GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);
WriteFile(mFile, str, dwBytesToWrite, NULL, NULL);
if (ReadFile(mFile, buff, 4096, &dwBytesRead, NULL))
{
cout << "Succes! Filen er skrevet!" << endl;
}
else {
cout << "Fejl! Filen blev ikke skrevet!" << endl;
}
}
system("pause");
return 0;
}
答案 0 :(得分:0)
sizeof("\\\\")
- 不要忘记空终结符!strlen
本来会更接近,但仍然是两个,而不是一个),这意味着\
, U
和s
\
我们在字符串文字中转义反斜杠(并且仅字符串文字 - 这意味着源代码的部分看起来像"this"
)以便表明他们自己并没有引入逃脱序列。
答案 1 :(得分:0)
这是create index idx on article_criterias(article_id, "group", option, option_val);
的事情。它解决了这个问题。