gpt4 book ai didi

C++ ofstream 未按预期运行

转载 作者:太空狗 更新时间:2023-10-29 23:34:09 25 4
gpt4 key购买 nike

我觉得我遗漏了一些明显的东西,但似乎无法解决以下问题:

请看下面的代码。它所做的只是循环 20 次并将循环索引写入文件。每三次写入文件后,该文件将关闭并启动一个新文件(使用检查 3 次写入的 IF 循环。

第一个文件工作正常,并按预期写入。然后 IF 第一次启动,当前文件关闭并启动一个新文件。

注意:此时我可以正常写入新文件。

然后 IF 结束并将处理丢回 FOR 循环。但是现在写入文件不起作用(没有错误,没有写入)。

因此文件在创建它的 IF block 中成功写入。然后 IF block 结束。然后 FOR 循环结束当前遍并开始新遍。现在写不行了。

任何人都可以提供帮助,我可以找到不同的方法来做我需要做的事情,但我只想了解为什么会这样?

int main()
{
unsigned int test_rowcounter = 0;
unsigned int test_filenumber = 0;
char filenamebuilder[50] = "";

sprintf(filenamebuilder, "testing_file%d",test_filenumber);
strcat(filenamebuilder,".tsv");
ofstream fsTestOutput;
fsTestOutput.open(filenamebuilder, fstream::out);

//Loop 20 times writibng the loop index value to a file
for(unsigned int f=0;f<20;f++)
{
fsTestOutput << f; //This write only works for the original file
test_rowcounter++;

//If three rows have been written to a file then start a new file
if(test_rowcounter == 3)
{
test_rowcounter = 0;
test_filenumber++; // increment the number that is added to the
// base filename to create a new file

//Close the previous file and open a new one
fsTestOutput.close();
sprintf(filenamebuilder, "testing_file%d",test_filenumber);
strcat(filenamebuilder,".tsv");
ofstream fsTestOutput;
fsTestOutput.open(filenamebuilder, fstream::out);
// This next line works, the data is written
// for all files at this point
fsTestOutput << "FILE JUST CHANGED,";
}
}
}

最佳答案

当您创建新文件时,您在 if 语句中声明了第二个 ofstream fsTestOutput

第二个 ofstream 的作用域是您的 if 语句的局部范围,因此它可以在您的 if 中正常工作。但是,当您离开 if 语句并返回到 for 循环时,新的 ofstream 实例超出范围,并且您的代码恢复为使用原始实例(你已经关闭了,因此没有输出!)

  if(test_rowcounter == 3)
{
test_rowcounter = 0;
test_filenumber++;
//Close the previous file and open a new one
fsTestOutput.close();
sprintf(filenamebuilder, "testing_file%d",test_filenumber);
strcat(filenamebuilder,".tsv");
ofstream fsTestOutput; // GET RID OF THIS
fsTestOutput.open(filenamebuilder, fstream::out);
fsTestOutput << "FILE JUST CHANGED,";
}

关于C++ ofstream 未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5727994/

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