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)
{
fs
To delete a line from your current text file, you will have to read in all lines, e.g. storing the data in a std::map
, remove the relevant item, and write it all back out again. An alternative is to use a database or binary fixed size record file, but reading everything into memory is common. By the way, I would remove the ios::app
append mode for opening the file for reading. It translates to the equivalent of append mode for fopen
, but the C99 standard is unclear on what it means for reading, if anything.
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";
}
}
}
}