char tempFilename[256];
wchar_t filename[512];
fprintf(stdout, "Please enter file name/path: \n");
getchar();
fgets(tempFilename, 255, stdin);
MultiByteToWideChar(CP_ACP, 0, tempFilename, -1, filename, strlen(tempFilename)*2);
if((hReadFile = CreateFile(filename, GENERIC_READ , 0, 0, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE)
{
fprintf(stdout, "File could not be opened, make sure name is under 256 chars. Error Code - %d.\n", GetLastError());
return (0);
}
我已经检查了MultiByteToWideChar()是否成功。
事实上,我也尝试过类似于C:\用户\用户名\桌面\测试.txt的路径,而不是C:\用户\用户名\桌面\测试.txt
我使用以下命令将\\
while(temp < len )
{
filename1[cntr1] = tempFilename[temp];
cntr1 += 1;
if(tempFilename[temp] == '\\')
{
filename1[cntr1] = '\\';
cntr1 += 1;
}
temp += 1;
}
有效期至。
我做错什么了。。?
最佳答案
在尝试使用前打印出filename
。十有八九,这样的简单调试输出将向您显示确切的问题。
并用分隔符将其打印出来,以便查看是否有换行符:
printf ("[%s]\n", filename);
(或同等手段,如使用
wprintf
)。如果有新行,你会看到:
[myfile.txt
]
而不是:
[myfile.txt]
如果在要删除换行符的地方得到一个字符串,可以使用以下内容:
int slen = strlen (filename);
if ((slen > 0) && (filename[slen-1] == '\n'))
filename[slen-1] = '\0';
(同样,或等效,例如使用
wcslen
)。另外,如果输入来自用户,则不需要将
\
替换为\\
。转义仅在C源代码本身中是必需的。还有,最后一件事,我不完全确定你为什么在
getchar()
之前打电话给fgets()
-你可能会丢失你输入的任何内容的第一个字符。