需要有关通过fstream保存变量的帮助,我是否需要使用向量? [英] Need help regarding saving variables via fstream, do I need to use vector?
问题描述
我正在做这个项目,我想在其中保存设备的一些变量;设备名称,ID和类型.
I doing this project, where I want to save some variables for a device; Devicename, ID and type.
bool Enhedsliste::newDevice(string deviceName, string type)
{
fstream myFile;
string line;
char idDest[4];
myFile.open("Devices.txt", ios::app | ios::in | ios::out); //Opretter/Åbner fil, app = startlinje er den nederste linje, in out = input output
if (myFile.is_open())
{
while (getline(myFile, line)) //Går filen igennem for hver linje
{
if (line == deviceName)
{
cout << deviceName << "-device already exists." << endl;
return false;
}
}
}
else
{
cout << "Uable to open file." << endl;
return false;
}
myFile.close();
myFile.open("Devices.txt", ios::app | ios::in | ios::out); //Opretter/Åbner fil, app = startlinje er den nederste linje, in out = input output
if (myFile.is_open())
{
if (type == "Lampe")
type_ = 1;
else if (type == "Roegalarm")
type_ = 2;
else if (type == "Tyverialarm")
type_ = 3;
else
{
cout << "Type does not exists." << endl;
return false;
}
deviceName_ = deviceName;
myFile << deviceName_ << endl;
id_++;
sprintf_s(idDest, "%03d", id_);
myFile << idDest << endl;
myFile << type_ << endl;
myFile.close();
return true;
}
else
{
cout << "Uable to open file." << endl;
return false;
}
}
现在,我还想制作一个deleteDevice,在这里我可以将deviceName作为参数,它将找到该行并删除ID和类型,但是我不知道该怎么做.
Now I also want to make a deleteDevice, where I can take deviceName as a parameter and it will find that line and delete ID and type, but I have no idea on how to do this.
我需要将addDevice重写为vector吗?那我该怎么做呢?
Do I need to rewrite my addDevice to vector? And how do I do this?
在此先感谢您提供错误的代码,解释等.对此我是陌生的.
Thanks in advance and sorry for bad code, explanation etc. I'm new to this.
推荐答案
要删除单个设备,您可以读取文件并写入临时文件. 传输/过滤数据后,重命名和删除文件:
To delete a single device you might read the file and write to a temporary file. After transferring/filtering the data, rename and delete files:
#include <cstdio>
#include <fstream>
#include <iostream>
int main() {
std::string remove_device = "Remove";
std::ifstream in("Devices.txt");
if( ! in) std::cerr << "Missing File\n";
else {
std::ofstream out("Devices.tmp");
if( ! out) std::cerr << "Unable to create file\n";
else {
std::string device;
std::string id;
std::string type;
while(out && std::getline(in, device) && std::getline(in, id) && std::getline(in, type)) {
if(device != remove_device) {
out << device << '\n' << id << '\n' << type << '\n';
}
}
if( ! in.eof() || ! out) std::cerr << "Update failure\n";
else {
in.close();
out.close();
if( ! (std::rename("Devices.txt", "Devices.old") == 0
&& std::rename("Devices.tmp", "Devices.txt") == 0
&& std::remove("Devices.old") == 0))
std::cerr << "Unable to rename/remove file`\n";
}
}
}
}
这篇关于需要有关通过fstream保存变量的帮助,我是否需要使用向量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!