首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateFile()总是失败

CreateFile()总是失败
EN

Stack Overflow用户
提问于 2013-09-10 07:28:30
回答 1查看 244关注 0票数 0
代码语言:javascript
复制
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。

我使用以下方法将\\转换为\

代码语言:javascript
复制
while(temp < len )
{
    filename1[cntr1] = tempFilename[temp];
    cntr1 += 1;
    if(tempFilename[temp] == '\\')
    {
        filename1[cntr1] = '\\';
        cntr1 += 1;
    }
    temp += 1;
}

直到\ to \\。我哪里出错了..?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-10 07:32:11

在尝试使用filename之前先打印出来。十次中有九次,这样一个简单的调试输出会告诉您确切的问题。

然后用分隔符打印出来,这样您就可以看到其中是否有换行符:

代码语言:javascript
复制
printf ("[%s]\n", filename);

(或类似的手段,例如使用wprintf)。

如果有换行符,你会看到:

代码语言:javascript
复制
[myfile.txt
]

而不是:

代码语言:javascript
复制
[myfile.txt]

如果在要去掉换行符的地方得到字符串,可以使用以下内容:

代码语言:javascript
复制
int slen = strlen (filename);
if ((slen > 0) && (filename[slen-1] == '\n'))
    filename[slen-1] = '\0';

(同样,或等效的,例如使用wcslen)。

另外,如果输入来自用户,则不需要将\替换为\\。转义仅在C源代码本身中是必需的。

最后一件事,我不太清楚你为什么要在getchar()之前打fgets() --你可能会失去你输入的任何东西的第一个字符。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18712962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档