gpt4 book ai didi

c++ - 我需要在写入后和读取前关闭文件吗?

转载 作者:行者123 更新时间:2023-11-28 06:08:11 24 4
gpt4 key购买 nike

我已经使用 std::fstream 从文件中读取和写入,但似乎写入后我无法立即读取,控制台会崩溃。我尝试在写入后关闭文件并在读取前重新打开文件,但没有崩溃,所以这是真正的问题吗?这是两种情况的代码

不关闭:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdlib.h>



int _tmain(int argc, _TCHAR* argv[])
{
std::fstream output("text.txt", std::ios::out | std::ios::in | std::ios::trunc);
if (!output)
{
std::cerr << "Error";
exit(1);
}
char a[10], b[10];
std::cin >> b;
output << b;
output >> a;
std::cout << a;
return 0;
}

关闭/重新打开:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdlib.h>



int _tmain(int argc, _TCHAR* argv[])
{
std::fstream output("text.txt", std::ios::out | std::ios::in | std::ios::trunc);
if (!output)
{
std::cerr << "Error";
exit(1);
}
char a[10], b[10];
std::cin >> b;
output << b;
output.close();
output.open("text.txt");
output >> a;
std::cout << a;
return 0;
}

最佳答案

当你读/写一个文件时,有一个“游标”来存储文件中的实际位置。在你写完之后,这个光标会被设置到你所写内容的末尾。因此,为了读取您刚刚写入的数据,您必须将光标重置到文件的开头,或者您想要读取的任何位置。试试这个代码:

int _tmain(int argc, _TCHAR* argv[])
{
std::fstream output("text.txt", std::ios::out | std::ios::in | std::ios::trunc);
if (!output)
{
std::cerr << "Error";
exit(1);
}
char a[10], b[10];
std::cin >> b;
output << b;
output.seekp(std::ios_base::beg); // reset to the begin of the file
output >> a;
std::cout << a;
return 0;
}

关于c++ - 我需要在写入后和读取前关闭文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31922262/

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