Открыть путь к файлу из другого файла в 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);