在c++中使用ifstream打开txt文件时遇到问题

问题描述 投票:0回答:1

我已经在这个问题上坚持了几个小时了。我有代码逐字处理 txt 文件并对输入进行哈希处理。 但是我什至无法获取打开 txt 文件的代码。我使用过 eclipse 和 Visual Studio,我确保 txt 文件与其他文件位于同一文件夹中,并在 VS 中将其添加到项目中。由于某种原因,它仅适用于 Visual Studio,并且仅适用于我的 4 个文件中的 1 个。我认为这个 1 文件在我出于某种原因将内容复制到另一个文件后开始工作。我在构建时没有收到任何错误或警告,但我不断收到错误“打开文件时出错”。在 Eclipse 和 VS 中它只是崩溃。请帮助如果您需要任何背景信息,请告诉我,我非常感谢您的帮助。

#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
#include <sstream>
#include "HashType - Copy.h"
using namespace std;

int main() {
    for (int b : {33, 37, 39, 41}) {
        ifstream inFile("hashText1.txt");
        if (!inFile) {
            cerr << "Error opening file." << endl;
            return 1;
        }

        int primeSize;
        string line;


        if (getline(inFile, line)) {
            stringstream ss(line);
            ss >> primeSize;
        }


        HashType<string> hashTable(primeSize);




        buildHashTable(inFile, hashTable, 1, b);
        
    }
        

    return 0;
}

正如我提到的,它仅适用于 1 个文件,并且仅适用于 VS,但不适用于任何其他文件或根本不适用于 Eclipse!

c++ ifstream
1个回答
0
投票

这个问题非常非常普遍。

解决这个问题的最好方法是......

...将文件名作为参数传递给您的程序。然后告诉 IDE 在运行程序时提供完整的文件路径作为参数。您可以在所有 IDE 中执行此操作。在 MSVS 中,它位于 Project → Settings → Debug → Program Arguments(我最后检查过)。

quux.cpp

int main( int argc, char ** argv )
{
  if (argc != 2)
  {
    std::cerr << "usage:\n"
      "quux FILENAME\n";
    return 1;
  }

  std::ifstream f( argv[1] );
  ...
}

另一种(不太好)的修复方法......

...就是硬编码完整路径。这种解决方案让教授和助教们彻夜难眠,不得不修改你的程序才能简单地工作。

  std::ifstream f( "C:/Users/Jhgg/Programming/AssignmentN/hashText1.txt" );
© www.soinside.com 2019 - 2024. All rights reserved.