从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);
我正在尝试将文件处理程序打开到我从文件中获得的路径, 例如,我有一个包含完整路径的输入文件: 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);