gpt4 book ai didi

CreateFile() 总是失败

转载 作者:太空宇宙 更新时间:2023-11-04 06:32:56 26 4
gpt4 key购买 nike

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:\users\user_name\desktop\test.txt 而不是 C:\users\user_name\desktop\test.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 源代码本身需要转义。

还有,最后一件事,我不是完全确定你为什么要在 fgets() 之前调用 getchar() - 你'很可能会丢失您正在输入的任何内容的第一个字符。

关于CreateFile() 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18712962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com