Открыть путь к файлу из другого файла в c

Я пытаюсь открыть обработчик файла для пути, который я получил из файла, у меня есть входной файл, который содержит полный путь, например: c:\def\es1.txt

я заменил "\" char на double "\", чтобы он соответствовал строковому формату, а затем я использую:

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.

когда я заменяю переменную wtext в CreateFile:L"c:\\def\\es1.txt"работает нормально, в чем проблема?

3 ответа

Решение

Вы уверены, что в вашем файле, который содержит путь, нет специального символа в конце? Как \r или \n?

Вы можете распечатать strlen и узнайте, содержит ли ваша строка только классический символ.

Я заменил "\" char на double "\", чтобы он соответствовал строковому формату

Обратная косая черта в строке является обратной косой чертой. То, что они должны быть экранированы в строковых литералах, не означает, что они должны быть удвоены в каждой строке, которую вы обрабатываете. Другими словами, "\\" строковый литерал, содержащий ровно одну обратную косую черту

Файл с именем c:\\def\\es1.txt с двойной обратной косой чертой, кажется, не существует, поэтому открытие не удается. По крайней мере, я так думаю. Я не знаком с Windows; в Linux двойная косая черта в именах файлов интерпретируется как одна косая черта.

Спасибо всем, это был перевод строки и необходимость очищать переменную char:

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);
Другие вопросы по тегам