带有路径名和变量文件名的 fopen 不起作用
fopen with pathname and variable filename not working
我在 C 中看到了一些类似的问题,但它们没有回答我的问题。
一致的错误是错误:没有这样的文件或目录。
用户输入 aFile.txt 并且我确认此文件与程序存在于同一目录中。
如果我手动更改:
input_file = fopen(path, "r");<br/>
至:
input_file = fopen(".\aFile.txt", "r");<br/>
有效...
此外,printf("path = %s\n", path);
打印 .\aFile.txt
这让我相信我的串联是可以的。
我做错了什么?
char path[25] = "./";
char filename[21];
printf("Enter filename, max 20 characters: ");
fgets(filename, 20, stdin);
strcat(path, filename);
strtok(path, "\n"); // FIXED THE ISSUE BY REMOVING THE trailing '\n'
printf("path = %s\n", path);
FILE * input_file;
input_file = fopen(path, "r"); // fopen(".\aFile.txt", "r") works!!!
if (input_file == NULL)
perror("Error");
else {
loader(list, input_file);
fclose(input_file);
printf("list loaded from file succesfully.\n");
}
fgets 将包含换行符,所以很可能这就是杀死它的原因。删除末尾的换行符,它应该可以工作。
这是正在读取的新行。查看此内容的一个好方法是打印带有前导和尾随“:”的文件名:
printf("path = :%s:\n", path);
打印出来的是:
Server:junk Username$ ./a.out
Enter filename, max 20 characters: test.txt
path = :./test.txt
:
Error: No such file or directory
请注意第二个“:”换行。
我在 C 中看到了一些类似的问题,但它们没有回答我的问题。
一致的错误是错误:没有这样的文件或目录。
用户输入 aFile.txt 并且我确认此文件与程序存在于同一目录中。
如果我手动更改:
input_file = fopen(path, "r");<br/>
至:
input_file = fopen(".\aFile.txt", "r");<br/>
有效...
此外,printf("path = %s\n", path);
打印 .\aFile.txt
这让我相信我的串联是可以的。
我做错了什么?
char path[25] = "./";
char filename[21];
printf("Enter filename, max 20 characters: ");
fgets(filename, 20, stdin);
strcat(path, filename);
strtok(path, "\n"); // FIXED THE ISSUE BY REMOVING THE trailing '\n'
printf("path = %s\n", path);
FILE * input_file;
input_file = fopen(path, "r"); // fopen(".\aFile.txt", "r") works!!!
if (input_file == NULL)
perror("Error");
else {
loader(list, input_file);
fclose(input_file);
printf("list loaded from file succesfully.\n");
}
fgets 将包含换行符,所以很可能这就是杀死它的原因。删除末尾的换行符,它应该可以工作。
这是正在读取的新行。查看此内容的一个好方法是打印带有前导和尾随“:”的文件名:
printf("path = :%s:\n", path);
打印出来的是:
Server:junk Username$ ./a.out
Enter filename, max 20 characters: test.txt
path = :./test.txt
:
Error: No such file or directory
请注意第二个“:”换行。