使用fstream同时读写
use fstream to read and write in the same time
我正在学习如何从文件中读取和写入。有一个问题,当我尝试在读取文件后写入(例如文件字母中的某些内容--)或写入文件后读取
使用 fstream
出了点问题。我试着只写或读,但它奏效了。有什么问题?
文件内容为:
abcdefgh
ijklmnopqr
stuvw
xyz
代码是:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
fstream ioFile;
char ch;
ioFile.open("search.txt", ios::in | ios::out);
if (!ioFile)
{
cout << "problem opening the file";
goto k270;
}
while (ioFile>>ch)
{
if (ch == 'z')
{
ioFile.seekp(((int)ioFile.tellg()));
ioFile << "x";
}
}
//cout<<ioFile.rdbuf();
ioFile.close();
k270:
system("pause");
return 0;
}
看看这个答案: 它解释了您遇到的错误。
简短版本:输入和输出被缓冲,只有在您强制更新缓冲区之间的缓冲区时,交错读写才有效。
这对我有用:
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::fstream ioFile;
char ch;
ioFile.open("search.txt", std::ios::in | std::ios::out);
if (!ioFile)
{
std::cout << "problem opening the file";
return 1;
}
while (ioFile >> ch)
{
if (ch == 'z')
{
ioFile.seekp(-1, std::ios_base::cur);
ioFile << "x";
ioFile.flush();
}
}
ioFile.close();
return 0;
}
不同的是我用ioFile.seekp(-1, std::ios_base::cur);
从cur
租的位置往后退了一步。您也可以使用 ioFile.seekp((int)ioFile.tellg() -1);
- 注意 -1
.
然后后退并覆盖 z 后,使用 ioFile.flush();
强制将写入推送到文件。这也意味着读取缓冲区已更新,否则读取操作只会退回其缓冲区并继续读取相同的缓冲 z。
我正在学习如何从文件中读取和写入。有一个问题,当我尝试在读取文件后写入(例如文件字母中的某些内容--)或写入文件后读取
使用 fstream
出了点问题。我试着只写或读,但它奏效了。有什么问题?
文件内容为:
abcdefgh
ijklmnopqr
stuvw
xyz
代码是:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
fstream ioFile;
char ch;
ioFile.open("search.txt", ios::in | ios::out);
if (!ioFile)
{
cout << "problem opening the file";
goto k270;
}
while (ioFile>>ch)
{
if (ch == 'z')
{
ioFile.seekp(((int)ioFile.tellg()));
ioFile << "x";
}
}
//cout<<ioFile.rdbuf();
ioFile.close();
k270:
system("pause");
return 0;
}
看看这个答案: 它解释了您遇到的错误。
简短版本:输入和输出被缓冲,只有在您强制更新缓冲区之间的缓冲区时,交错读写才有效。
这对我有用:
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::fstream ioFile;
char ch;
ioFile.open("search.txt", std::ios::in | std::ios::out);
if (!ioFile)
{
std::cout << "problem opening the file";
return 1;
}
while (ioFile >> ch)
{
if (ch == 'z')
{
ioFile.seekp(-1, std::ios_base::cur);
ioFile << "x";
ioFile.flush();
}
}
ioFile.close();
return 0;
}
不同的是我用ioFile.seekp(-1, std::ios_base::cur);
从cur
租的位置往后退了一步。您也可以使用 ioFile.seekp((int)ioFile.tellg() -1);
- 注意 -1
.
然后后退并覆盖 z 后,使用 ioFile.flush();
强制将写入推送到文件。这也意味着读取缓冲区已更新,否则读取操作只会退回其缓冲区并继续读取相同的缓冲 z。