代码之家  ›  专栏  ›  技术社区  ›  Hristo

如何在C++中使用IFFISH打开和读取文件?

  •  2
  • Hristo  · 技术社区  · 14 年前

    我想打开一个文件并从中读取一行。文件中只有一行,所以我不必担心循环,不过为了将来参考,最好知道如何读取多行。

    int main(int argc, const char* argv[]) {
    
        // argv[1] holds the file name from the command prompt
    
        int number = 0; // number must be positive!
    
        // create input file stream and open file
        ifstream ifs;
        ifs.open(argv[1]);
    
        if (ifs == NULL) {
            // Unable to open file
            exit(1);
        } else {
            // file opened
            // read file and get number
            ...?
            // done using file, close it
            ifs.close();
        }
    }
    

    我该怎么做?另外,我是否能够正确地处理打开的文件?

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  5
  •   John Kugelman Michael Hodel    14 年前

    一些事情:

    1. 您可以使用 >> 流提取运算符: ifs >> number .

    2. 标准库功能 getline 如果需要完整的文本行,将从文件中读取一行。

    3. 要检查文件是否打开,只需写入 if (ifs) if (!ifs) . 漏掉 == NULL .

    4. 您不需要在末尾显式地关闭文件。当 ifs 变量超出范围。

    修订规范:

    if (!ifs) {
        // Unable to open file.
    } else if (ifs >> number) {
        // Read the number.
    } else {
        // Failed to read number.
    }
    
        2
  •  1
  •   Iain    14 年前

    对于您在这里所做的,只需:

    ifs >> number;
    

    将从流中提取一个数字并将其存储在“数字”中。

    循环,取决于内容。如果都是数字,比如:

    int x = 0;
    while (ifs >> numbers[x] && x < MAX_NUMBERS)
    {
     ifs >> number[x];
     x++;
    }
    

    可以在数组中存储一系列数字。这是因为如果提取成功,则提取运算符的副作用为“真”;如果提取失败,则为“假”(由于文件结尾或磁盘错误等原因)。