如何制作初始文件的 10 个副本,如果第一个文件是 AS-1.txt第二个应该是 AS-2.txt依此类推



循环没有制作 10 个副本,我不知道如何更改文件名

#include "iostream"
#include "fstream"
#include "windows.h"
using namespace std;
void main()
{
        char str[200];   
        ifstream  myfile("as-1.txt");
        if (!myfile)
        {
            cerr << "file not opening";
            exit(1);
        }
        for (int i = 0; i < 10; i++)
        {
            ofstream myfile2("as-2.txt");
            while (!myfile.eof())
            {
                myfile.getline(str, 200);
                myfile2 << str << endl;
            }
        }
       system("pause");
}

使用来自<cstdio>的纯C API 的解决方案。易于定制。

const char* file_name_format = "as-%d.txt"; //Change that if you need different name pattern
const char* original_file_name = "as-1.txt"; //Original file
const size_t max_file_name = 255;
FILE* original_file = fopen(original_file_name, "r+");
if(!original_file)
    //file not found, handle error
fseek(original_file, 0, SEEK_END); //(*)
long file_size = ftell(original_file);
fseek(original_file, 0, SEEK_SET);
char* original_content = (char*)malloc(file_size);
fread(original_content, file_size, 1, original_file);
fclose(original_file);
size_t copies_num = 10;
size_t first_copy_number = 2;
char file_name[max_file_name];
for(size_t n = first_copy_number; n < first_copy_number + copies_num; ++n)
{
    snprintf(file_name, max_file_name, file_name_format, n);
    FILE* file = fopen(file_name, "w");
    fwrite(original_content, file_size, 1, file);
    fclose(file);
}
free(original_content);

(*) 如本页所述,SEEK_END不一定受支持(即它不是便携式解决方案)。然而,大多数符合POSIX的系统(包括最流行的Linux发行版),Windows系列和OSX都支持这一点,没有任何问题。

哦,还有一件事。此行

while (!myfile.eof())

不太正确。阅读这个问题 - 它解释了为什么你不应该编写这样的代码。

int main()
{
    const int copies_of_file = 10;
    for (int i = 1; i <= copies_of_file; ++i)
    {
       std::ostringstream name;
       name << "filename as-" << i << ".txt";
       std::ofstream ofile(name.str().c_str());
       ofile.close();
    }
    return 0;
}

这将制作一个名为"文件名为-1.txt"文件名为-2.txt"等的空白.txt文件的10个副本。

还要注意int main的使用:main总是有int的回报,从不void

最新更新