C语言复制文件问题
#include<stdio.h>voidmain(){FILE*f,*y;chara[20],b[20],ch;printf("请输入第一个文件名:");gets(a)...
#include <stdio.h>
void main()
{ FILE *f,*y;
char a[20],b[20],ch;
printf("请输入第一个文件名:");
gets(a);
printf("请输入第二个文件名:");
gets(b);
f = fopen(a,"r+");
y = fopen(b,"r+");
ch = fgetc(f);
while(ch!=EOF)
{
fputc(ch,y);
ch = fgetc(f);
if(ch!=EOF){
printf("复制文件中");
} else
{
printf("复制完成");
}
}
fclose(f);
fclose(y);
system("pause");
}
可以运行,但是后面都出错(什么stream!=null); 展开
void main()
{ FILE *f,*y;
char a[20],b[20],ch;
printf("请输入第一个文件名:");
gets(a);
printf("请输入第二个文件名:");
gets(b);
f = fopen(a,"r+");
y = fopen(b,"r+");
ch = fgetc(f);
while(ch!=EOF)
{
fputc(ch,y);
ch = fgetc(f);
if(ch!=EOF){
printf("复制文件中");
} else
{
printf("复制完成");
}
}
fclose(f);
fclose(y);
system("pause");
}
可以运行,但是后面都出错(什么stream!=null); 展开
7个回答
展开全部
c语言中有很多对文件进行操作的工具,可以利用fgetc()和fputc()来实现文件的拷贝功能。
比如:目的:在/home/cosmos/c_code目录下有一个名为students.txt的源文件,想将其拷贝到目录/home/cosmos/下,并命名为students_copy.txt。
代码如下:
#include<stdio.h>
int main(int argc, char *argv[]) //argc表示命令参数个数, argv[]表示参数名称
{
int c;
FILE *fpSrc, *fpDest; //定义两个指向文件的指针
fpSrc = fopen(argv[1], "rb"); //以读取二进制的方式打开源文件
if(fpSrc==NULL){
printf( "Source file open failure."); //源文件不存在的时候提示错误
return 0;
}
fpDest = fopen(argv[2], "wb"); // //以写入二进制的方式打开目标文件
if(fpDest==NULL){
printf("Destination file open failure.");
return 0;
}
while((c=fgetc(fpSrc))!=EOF){ //从源文件中读取数据知道结尾
fputc(c, fpDest);
}
fclose(fpSrc); //关闭文件指针,释放内存
fclose(fpDest);
return 0;
}
//输入命令 gcc CopyFile.c -o CopyFile 编译程序源文件得到可执行文件CopyFile
输入运行命令./CopFile /home/cosmos/c_code/students.txt /home/cosmos/students_copy.txt
然后打开 students_copy.txt检验一下复制是否成功。
展开全部
出现stream!=null的原因是文件名过长,超出那数组的大小!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
印象中这种错误应该属于定义的指针f,y没有做内存空间长度预分配,使用完毕后没有释放空间所致,详细的已记不太清了,你可以看一下 <alloc.h> 中的malloc()及free()两个函数,前一个分配内存空间,后一个释放空间,配合使用。
N多年前用过,现在已经记不清了,看无人回答,凭映像提示一下,希望有所帮助。
N多年前用过,现在已经记不清了,看无人回答,凭映像提示一下,希望有所帮助。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
打开文件方式问题y = fopen(b,"r+");改为
y = fopen(b,"w+");
printf("复制文件中");每循环一次都执行一次 会显示很多 放在循环前面好些
y = fopen(b,"w+");
printf("复制文件中");每循环一次都执行一次 会显示很多 放在循环前面好些
追问
谢谢,还是不行
追答
system("pause");需要引用头文件stdlib.h #include
测试可行啊
更改后的程序
#include
#include
void main()
{ FILE *f,*y;
char a[20],b[20],ch;
printf("请输入第一个文件名:");
gets(a);
printf("请输入第二个文件名:");
gets(b);
f = fopen(a,"r+");
y = fopen(b,"w+");
ch = fgetc(f);
printf("复制文件中...\n");
while(ch!=EOF)
{
fputc(ch,y);
ch = fgetc(f);
if(ch!=EOF){
} else
{
printf("复制完成\n");
}
}
fclose(f);
fclose(y);
system("pause");
}
ps:文件的默认路径是源文件目录
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
乍看没什么问题。。是不是文件f、y还不存在?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询