Need help regarding saving variables via fstream, do I need to use vector?

后端 未结 2 1189
我在风中等你
我在风中等你 2021-01-25 22:08

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         


        
相关标签:
2条回答
  • 2021-01-25 22:32

    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.

    0 讨论(0)
  • 2021-01-25 22:34

    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";
                }
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题