无法打开存储在字符串C ++中的文件名

时间:2017-05-19 22:48:00

标签: c++ file-io concatenation

我有一个代码从xxx读取文件名commands.in并将其存储在字符串中,并将其称为string name

我想打开xxx,因为它也是一个文件,所以我将.data连接到它的末尾(因为我的所有文件都以.data结尾)所以它可以被打开像这样。

string filename = name + ".data";

现在我将该字符串输出到控制台并显示xxx.data,因此我知道它连接正确。当我尝试使用字符串打开文件时,我不断收到错误消息“文件不存在”。这就是我正在做的事情:

fstream fileObj;

fileObj.open(filename.c_str());xxx.data)这就是说该文件不存在。当我通过它的实际名称fileObj.open("xxx.data");打开文件时,它发现文件没有问题并执行我想要的操作。我放入.open参数的字符串与实际输入的字符串完全相同,但它不起作用。任何想法为什么会这样?

    #include <iostream>
#include <fstream>
#include <string>
//#include "Cache.h"

using namespace std;



double Avg(string fileName);
int Min(string fileName);
int Max(string filename);
int Med(string filename);




int main(){

  int numFile;
  string fileName;
  string opName;
  fstream fileObj;
  double avgVal;
  cout << "\n\n\n\n\n\n\n\n\n\n" << endl;
  fileObj.open("commands.in");

  fileObj >> numFile;


  for (int i = 0; i < numFile; i++){
    fileObj >> fileName;
    fileObj >> opName;



    if (opName == "Avg")
      {
        cout << "\n\nFilename = " << fileName<<endl;
        cout << "going for avg here"<<endl;
        avgVal = Avg(fileName);
        cout << avgVal;

  }

  return 0;
}

double Avg(string filename)
{
  cout << "ENTERED AVG METHOD" << endl;
  fstream file;
  string name = filename + ".data";
  // file.open(filename.c_str());
  file.open("A.data");
  if (file.fail())
    {
      cout << "The file was not found" << endl;
      return 0;
    }
  int count = 0;
  double allNum = 0;
  double current;
  double result;
  cout << "\nFilename goes here : " << name << endl;
  while(file)
    {
      file >> current;
      allNum += current;
      count +=1;
    }
  cout << "\n\n COUNT SHOULD BE 6 :  " << count << endl;

  result = allNum / count-1;

  return result;
}

commands.in

6
A Avg
B Max
C Med
A2 Avg
B Max
ABC Min

A.data

20
20
30
30
40
40

2 个答案:

答案 0 :(得分:1)

  • 您是否忘记使用filename代替name

  • 您是否检查过name是否有一个尾随换行符?

记录引用以确保您尝试打开正确的文件:

printf("filename: '%s'\n", filename.c_str());

此代码看起来不行:

  string name = filename + ".data";
  // file.open(filename.c_str());
  file.open("A.data");

您的commands.in包含A.data,并且您追加.data,然后仍然使用filename而不是name。相当混乱。把这一切改为:

  cout << "Open file: ==>\"" << name << "\"<==\n";
  file.open(name.c_str());

答案 1 :(得分:1)

检查以确保您正在使用的文件与当前工作目录位于同一目录中。您可能希望为fileObj.open(filename.c_str());提供绝对路径,例如:

string filename = "C:\\Users\\Username\\Desktop\\filename.data"

如果该文件与当前工作目录不在同一目录中,并且您未提供完全限定路径,则该错误将不断弹出。

另外,尝试对文件名进行硬编码,以确保字符串中没有任何行终止符:

fileObj.open("C:\\Users\\Username\\Desktop\\filename.data");