从c中的其他文件打开文件路径

open file path from other file in c

我正在尝试将文件处理程序打开到我从文件中获得的路径, 例如,我有一个包含完整路径的输入文件: 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" 它工作正常,问题是什么?

您确定包含路径的文件末尾不包含任何特殊字符吗?比如 \r 或 \n ?

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

I replaced the "\" char to double "\" so it will fit string format

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

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

谢谢大家,这是换行符,需要清除字符变量:

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


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


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


        mbstowcs(wtext, deststring, strlen(deststring) + 1);//Plus null
        _tprintf(wtext);