0

我正在尝试打开一个文件处理程序到我从文件中获得的路径,我有输入文件,其中包含完整路径,例如:c:\def\es1.txt

我将“\”字符替换为双“\”,因此它适合字符串格式,然后我正在使用:

myfile = fopen("temp.txt", "r");

while (fgets(line, line_size, myfile) != NULL){


    printf("==============================\n");
    printf(line);
    system("PAUSE\n");
    mbstowcs(wtext, line, strlen(line) + 1);//Plus null
    _tprintf(wtext);


    LPWSTR ptr = wtext;
    hFile = CreateFile(wtext,                // name of the write
        GENERIC_WRITE,          // open for writing
        0,                      // do not share
        NULL,                   // default security
        OPEN_EXISTING,             // create new file only
        FILE_ATTRIBUTE_NORMAL,  // normal file
        NULL);                  // no attr. template

    if (hFile == INVALID_HANDLE_VALUE)
    {
        DisplayError(TEXT("CreateFile"));
        _tprintf(TEXT("Terminal failure: Unable to open file \"%s\" for write.\n"), wtext);
        return;

    }
    else {
        printf("yes!!!!!!!\n");
    }

当命令 _tprintf(wtext); 发生我看到的字符串应该是:“c:\def\es1.txt”

但 CreateFile 命令失败:

FATAL ERROR: Unable to output error code.
ERROR: CreateFile failed with error code 123 as follows:
The filename, directory name, or volume label syntax is incorrect.
Terminal failure: Unable to open file "c:\\def\\es1.txt
" for write.

当我将 CreateFile 中的 wtext 变量替换为:L"c:\\def\\es1.txt" 它工作正常,有什么问题?

4

3 回答 3

2

您确定包含路径的文件最后不包含任何特殊字符吗?像 \r 或 \n ?

您可以打印strlen并知道您的字符串是否仅包含经典字符。

于 2015-03-10T13:38:48.940 回答
1

我将“\”字符替换为双“\”,因此它适合字符串格式

字符串中的反斜杠是反斜杠。它们必须在字符串文字中转义并不意味着它们必须在您处理的每个字符串中加倍。换句话说,"\\"是一个包含一个反斜杠的字符串文字。

以双反斜杠命名的文件c:\\def\\es1.txt似乎不存在,因此打开失败。至少这是我的猜测。我不熟悉Windows;在 Linux 下,文件名中的双斜杠被解释为一个斜杠。

于 2015-03-10T14:09:35.010 回答
0

谢谢大家,这是换行符,需要清除 char var:

while (fgets(line, line_size, myfile) != NULL){


        printf("==============================\n");
        printf(line);


        //solution
        char deststring[BUFFER];
        memset(deststring, '\0', sizeof deststring);
        strncpy(deststring, line, strlen(line) - 1);


        mbstowcs(wtext, deststring, strlen(deststring) + 1);//Plus null
        _tprintf(wtext);
于 2015-03-10T14:44:22.470 回答