如何在 C++ 中更改文件内容
how can I change a file content in c++?
我有这个程序,可以将文件中的负数更改为正数。它有效,但文件中的负数不会更改。例如,如果我的文件中有这个数字:12 2 -3 -1当我运行该程序时,数字的总和将是 18,但是当我再次打开文件时,我看到 12 2 -3 -1 .我应该怎么做才能看到 12 2 3 1 ?这是我的代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string name;
cin >> name;
int number;
int num=0;
ifstream myFile(name, ios::in);
ofstream mine(name, ios::app);
while(myFile >> number)
{
num += (number<0 ? -number : number);
mine << num;
}
cout << "num = " << num << endl;
system("pause");
return 0;
}
- 同时打开文件进行读取和写入通常不是一个坏主意。您可能在打开
mine
时遇到I/O错误,但由于您没有检查它,程序会静默忽略您的写入。尝试先读取文件内容(例如向量(,然后关闭文件进行读取并再次打开进行写入(不追加,因为这会将旧内容保留在文件中(。 - 将值写回文件时,也要在数字后写空格,否则你只会在文件中得到一串数字,但你不知道一个数字在哪里开始,另一个在哪里结束。
- 您的程序现在不会"将负数更改为正数",而是将绝对值的累积总和打印到文件中。
- 首先尝试写入标准输出,这样在测试时就不会破坏文件。如果有效,请将
cout
更改为输出流。
这是代码。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cstdlib>
using namespace std;
int main()
{
string name;
cin >> name;
int number;
int num=0;
ifstream myFile(name, ios::in);
vector<int> vec;
while(myFile >> number)
{
vec.push_back(abs(number));
}
ofstream mine(name, ios::out);
for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
num += *it;
mine << *it << " ";
}
cout << "num = " << num << endl;
return 0;
}
-
同时打开同一文件和进程的读取和写入文件流会导致文件损坏。使用 ostringstream 存储从文件中读取的值。价值观从文件中读取,并将值存储在 Ostringstream 中缓冲区。
ifstream
对象在重新打开文件之前关闭一个ofstream
对象,以便可以保存缓冲区内容。 -
注意:
ios::app
标志已被删除。否则新值将追加到现有值。 -
abs()
函数用于写回绝对值 - 这强制所有值为正。#include<sstream> int main() { string name; cin >> name; int number; int num=0; ifstream myfile(name.c_str(), ios::in); ostringstream oss; while (myfile >> number) { num += (number<0 ? -number : number); oss << abs(number) << " "; } myfile.close(); ofstream mine(name.c_str()); cout << "num = " << num << endl; mine << oss.str(); return 0;
}
string name;
cin >> name;
int number=0;
int sum=0;
string outname=name+".pos.txt";
ifstream myFile(name,ifstream::in);
ofstream mine(outname, ofstream::out );
while(myFile >> number)
{
number= (number<0 ? -number : number);
sum+=number;
mine << number<<' ';
}
myFile.close();
mine.close();
cout << "sum = " << sum << endl;
system("pause");
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到