如何在c++中读取多个文件(文件已被用户命名)

dkqlctbz  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(203)

这是输入文件

file = name +".txt";
    fileoutput.open(file.c_str());
    fileoutput << name << endl << password << endl;
    fileoutput.close();

因此,该文件将命名为sarah.txt、kevin.txt等。
如何读取和显示多个文件中的所有数据?

cyej8jka

cyej8jka1#

我认为你的问题有两个方面:首先,“找到”所有要读取的文件,因为文件名是在运行时而不是编译时提供的,其次,阅读所有文件。

“查找”文件

你的代码会产生一堆不同的文本文件,例如sarah.txt和kevin.txt。程序需要知道这些文件的名字,在运行时之间,我将通过使用配置文件来合并这些文件。你可以有一个永远不会改变名称的文件,比如“config.txt”。每次你创建一个新文件并写入它,你把文件名写到配置文件中。2然后当需要加载所有文件时,你只需要读取配置文件。3你可以用一个分隔符,例如,用来分隔不同的文件名,作为逗号或任何其他字符,你知道不会出现在文件名。下面的例子“config.txt”:

sarah.txt,kevin.txt,michael.txt,

正在阅读文件

我会使用while循环来获取配置文件中的每一行,在while循环中,使用另一个while循环来读取这些文件中的所有数据。请看下面的代码。
首先,打开配置文件并确保它正确打开。

// Open the config file
ifstream configfile;
configfile.open("config.txt");

// Check that the file opened correctly
if(!configfile.is_open()) {
    cout << "Failed to open config file.\n";
    return -1;
};

然后你可以用while循环读取所有的文件名,如果我们给予getline()函数文件名和分隔符,它就会得到下一个文件名。

// Read the filename
while(getline(configfile, filename, ',')) {
    // Read the file
}

然后,在while循环中,可以打开一个文件名为的文件。

// Read the contents of the file
ifstream temporaryfile;
temporaryfile.open(filename);

// Check that the file opened correctly
if(!temporaryfile.is_open()) {
    cout << "Failed to open " << filename << "\n";
    continue;
}

现在只剩下读取文件了。

// Read the file
string content;
while(getline(temporaryfile, content)) {
    cout << content << "\n";
}

然后我们就可以关闭文件了。阅读的完整代码如下。

#include <iostream>
#include <vector>
#include <string>
#include <fstream>

using namespace std;

int main(void) {
    
    // Open the config file
    ifstream configfile;
    configfile.open("config.txt");

    // Check that the file opened correctly
    if(!configfile.is_open()) {
        cout << "Failed to open config file.\n";
        return -1;
    };

    // Read the config file
    string filename;
    while(getline(configfile, filename, ',')) {
        
        // Read the contents of the file
        ifstream temporaryfile;
        temporaryfile.open(filename);

        // Check that the file opened correctly
        if(!temporaryfile.is_open()) {
            cout << "Failed to open " << filename << "\n";
            continue;
        }

        // Read the file
        string content;
        while(getline(temporaryfile, content)) {
            cout << content << "\n";
        }

        // Close the file
        temporaryfile.close();

    }

    // Close the file
    configfile.close();

}

我猜你也希望能够将每个文件中的密码和用户名分开,你可以像我对getline()做的那样做,除了你在每个文本文件而不是配置文件上做这件事,你只需要确保使用一个不会被用作密码或用户名的分隔符,比如换行符('\n')。

正在写入配置文件

写配置文件很容易。只要添加新的文件名,例如,你在代码中提供的变量文件,后面跟一个逗号。见下面的例子。

// Open the config file
ofstream configfile
configfile.open("config.txt", ios::app); // IOS:APP stands for append, meaning we add to the end of the file.

// Check that the file opened correctly
if(!configfile.is_open()) {
    cout << "Failed to open config file.\n";
    return -1;
};

// Write the filename to the end of the config file.
configfile << file << ',';

// Close the file.
configfile.close();

如果你还有什么问题,尽管问吧!

相关问题