我有一个代码从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
答案 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");