编辑:我处于严格的C语言环境中。任何C ++代码都不起作用。我在一个我无法调试的环境中。我只能编译并删除所有错误的程序。对不起,如果我看起来很严格,那就是我在这样的环境中工作。任何帮助表示赞赏!
我有一个名为namefi.txt的文件,其中包含所有文件名。每一行只有一个文件名,所以我使用strtok删除所有空格,只取我传递给FOPEN的文件名。但似乎f-open并未接受它。它正在创建output.txt文件,甚至将其重命名为所需的名称(虽然直到name_ne.txt - 不确定为什么'w'缺失,'name'只有四个字符长,但仍然很好)但是当我打开文件,我看到的只是“文件打开错误Naren.txt”。如果我注释掉程序的namefi部分和重命名部分,它会从输入文件写入输出文件。它只是从namefi.txt获取文件名并打开它的部分没有发生。任何帮助,将不胜感激。这是我的代码。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
FILE *inpfi, *outfi, *namefi,newna;
char buf[132], name[132], *trim;
namefi = fopen("Namefi.txt", "r");
while(frets(name, 132, namefi)!=NULL)
{
trim = strtok(name," ");
inpfi = fopen(trim, "r");
outfi = fopen("OUTPUT.txt", "w");
if(!inpfi)
fprintf(outfi, "File open error: %s", trim);
while(fgets(but,132,inpfi)!=NULL)
fprint(outfi, "%s", buf);
newna = strtok(trim, ".");
newna = strcat(newna,"_new.txt");
rename("OUTPUT.TXT", newna);
fclose(inpfi);
fclose(outfi);
}
}
答案 0 :(得分:1)
FILE *inpfi, *outfi, *namefi,newna;
newna
缺少*
。
while(frets(name, 132, namefi)!=NULL)
frets
应为fgets
trim = strtok(name," ");
inpfi = fopen(trim, "r");
你在第一次出现空格时开始你的文件名,我怀疑这是有意的。
outfi = fopen("OUTPUT.txt", "w");
在每次循环迭代中覆盖OUTPUT.txt
。您可能希望使用"a"
而不是"w"
或在循环输入之前打开文件。
while(fgets(but,132,inpfi)!=NULL)
but
应为buf
。
fprint(outfi, "%s", buf);
fprint
应为fprintf
。
newna = strtok(trim, ".");
为什么现在将newna
用作char*
时将其声明为FILE
(或FILE*
,我认为应该是这样)
rename("OUTPUT.TXT", newna);
fclose(inpfi);
fclose(outfi);
在关闭文件之前重命名该文件。我不确切知道这种情况下究竟是什么行为,但我怀疑这是一个好主意。
我提到的大多数错误都可以通过校对,编辑器检查或编译器警告/错误轻松避免。您发布的代码肯定无法编译。