gpt4 book ai didi

c++ - 使用循环多次复制文件; C/C++

转载 作者:行者123 更新时间:2023-11-30 03:05:40 25 4
gpt4 key购买 nike

我想使用不同的名称多次复制一个文件。

程序是这样的:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include <sstream>
#include<cstring>
using namespace std;

main()
{
string text;
int i;
char ch;
ostringstream oss;
FILE *fp1,*fp2;
if((fp1=fopen("One Dollar.jpg", "rb"))==NULL)
{
cout<<"Error";
exit(-1);
}
for(i=1; i<=5; i++)
{
oss << "C:\\5241 Dollar\\One Dollar " << i << ".jpg";

text = oss.str();

if((fp2=fopen(text.c_str(), "wb"))==NULL)
{
cout<<"Error "<<i;
exit(-1);
}
while(!feof(fp1))
{
fread(&ch, 1, 1, fp1);
fwrite(&ch, 1, 1, fp2);
}

fclose(fp2);

/* for(int j=0;j<30000;j++)
for(int k=0;k<30000;k++)
if(k==3000)
cout<<k; */

}
fclose(fp1);
}

其中有两个文件流,一个是源文件流,另一个是目标文件流。我以二进制读取模式加载实际文件,以二进制写入模式加载目标文件。我使用 for 循环来完成这项工作。但是一旦循环迭代第二次,fp2 的文件打开就会失败。我得到输出:错误 2。

我怎样才能使代码工作?

最佳答案

您应该在循环的每次迭代中打开和关闭第一个文件。

....
for(i=1; i<=5; i++)
{
if((fp1=fopen("One Dollar.jpg", "rb"))==NULL)
{
cout<<"Error";
exit(-1);
}
....

原因是因为在第一次迭代结束时,第一个文件指针在文件末尾,所以在第二次迭代时它不会看到任何数据。您必须关闭并重新打开文件(或者您可以使用 seek 跳转到文件的前面,但这是更简单的更改,因为它是复制粘贴)

编辑:新问题:

您需要重置字符串流。在第二次迭代中你试图打开

C:\\5241 Dollar\\One Dollar 1.jpgC:\\5241 Dollar\\One Dollar 2.jpg

这是无效的。

一种解决方案是将 ostringstream 声明带入循环:

....
for(i=1; i<=5; i++)
{
if((fp1=fopen("One Dollar.jpg", "rb"))==NULL)
{
cout<<"Error";
exit(-1);
}
ostringstream oss;
oss << "C:\\5241 Dollar\\One Dollar " << i << ".jpg";

关于c++ - 使用循环多次复制文件; C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com