我有一个文件,其中包含目录中每个文件的文件名。我试图打开该文件,从中读取文件名,然后打开每个文件。但是,我无法让它打开文件。我打印它正在阅读的单词并知道它正确读取;但是,它不会打开文件。有什么建议?我的节目如下。
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
FILE *in;
FILE *in2;
char inName[] = "inputfile.txt";
char *inName2;
inName2 = malloc(36 * sizeof (char));
char inPhrase[100];
if (( in = fopen(inName, "r")) == NULL )
{
printf("Can't open %s for reading.\n", inName);
return 2;
}
else
{
fgets(inName2, 36, in);
}
if (( in = fopen(inName2, "r")) == NULL )
{
printf("Can't open %s for reading. \n", inName2);
}
else
{
fgets(inPhrase, 100, in2);
printf("%s\n", inPhrase);
}
fclose(in);
fclose(in2);
return 0;
}
答案 0 :(得分:2)
您的代码中有一个完全错误和一个错误。第if (( in = fopen(inName2, "r")) == NULL )
行应改为in2
:if (( in2 = fopen(inName2, "r")) == NULL )
。你的错误信息几乎肯定是这样的:
Can't open test_file.txt
for reading
请注意fgets
总是为您读取的换行符。你应该以某种方式修剪线。有几种选择:
strchr(inName2, '\0')[-1] = '\0';
。\n
(或者可能是两个字符,Windows上为\r\n
)最后说明:您应该始终发布错误消息。如果你足够聪明,可以在第一时间正确地解释它,你就不会在这里发帖,所以不要指望我们接受你的程序失败的地方。
答案 1 :(得分:1)
这样做
#include <stdio.h>
#include <stdlib.h>
int main() {
char inName[] = "inputfile.txt", * inName2;
FILE * in = fopen(inName, "r"), * in2;
char inPhrase[100];
size_t len;
// Check whether file opened correctly or display error
if (in == NULL) { perror(inName); return 1; }
// Read file line by line
while (getline(&inName2, &len, in) != -1) {
// Check if file opens otherwise go to next file
if ((in2 = fopen(inName2, "r")) == NULL) { perror(inName2); continue; }
// Read 100 chars from each file and display
fgets(inPhrase, 100, in2);
printf("%s\n", inPhrase);
fclose(in2);
}
fclose(in);
return 0;
}