Ich habe einen Code, der einen Dateinamen xxx
von commands.in
liest und speichert es in einer Zeichenfolge, nennen Sie es string name
.Fehler beim Öffnen des Dateinamens in Zeichenfolge C++
Ich möchte xxx
öffnen, da es auch eine Datei ist, so dass ich verketten .data
bis zum Ende davon (da alle meine Dateien mit .data
Ende), so kann es wie so geöffnet werden.
string filename = name + ".data";
Jetzt ouput ich diese Zeichenfolge an die Konsole und es liest xxx.data
, so dass ich weiß, dass es richtig verkettet. Wenn ich jedoch versuche, eine Datei mit der Zeichenfolge zu öffnen, bekomme ich immer die Fehlermeldung "Datei existiert nicht". Das ist, was ich tue:
fstream fileObj;
fileObj.open(filename.c_str());
(die xxx.data
ist) Dies ist, dass die Datei nicht existiert. Wenn ich die Datei nach ihrem tatsächlichen Namen fileObj.open("xxx.data");
öffne, findet sie die Datei kein Problem und macht die Operationen, die ich will. Die Zeichenfolge, die ich in das Argument .open
einfüge, entspricht genau der tatsächlichen Eingabe, aber es funktioniert nicht. Irgendeine Idee warum das sein könnte?
#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
können Sie Ihre 'name' nur printf, bevor Sie versuchen, die Datei zu öffnen nur um sicher zu gehen? .. – Pavel
Ich habe den Namen vorher gedruckt, und es ist genau das gleiche. Wenn der Name der Datei "xxx.data" ist, drucke ich das genauso wie die Verkettung und sie sind gleich. – Podo