C++ 无法打开存储在字符串C++;
我有一个代码,可以从C++ 无法打开存储在字符串C++;,c++,file-io,concatenation,C++,File Io,Concatenation,我有一个代码,可以从命令中读取文件名xxx。在中,将其存储在字符串中,我们称之为string name 我想打开xxx,因为它也是一个文件,所以我将.data连接到它的末尾(因为我所有的文件都以.data结尾),这样就可以像这样打开它 stringfilename=name+“.data” 现在我将该字符串输出到控制台,它读取xxx.data,因此我知道它连接正确。但是,当我尝试使用字符串打开文件时,我不断收到错误消息“文件不存在”。这就是我正在做的: fstream文件对象 fileObj.o
命令中读取文件名xxx
。在
中,将其存储在字符串中,我们称之为string name
我想打开xxx
,因为它也是一个文件,所以我将.data
连接到它的末尾(因为我所有的文件都以.data
结尾),这样就可以像这样打开它
stringfilename=name+“.data”代码>
现在我将该字符串输出到控制台,它读取xxx.data
,因此我知道它连接正确。但是,当我尝试使用字符串打开文件时,我不断收到错误消息“文件不存在”。这就是我正在做的:
fstream文件对象代码>
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;
}
A.data
20
20
30
30
40
40
- 您是否忘记使用
文件名而不是名称
- 您是否检查了您的
名称
是否有尾随新行字符
记录它以确保您尝试打开正确的文件:
printf("filename: '%s'\n", filename.c_str());
此代码看起来不正常:
string name = filename + ".data";
// file.open(filename.c_str());
file.open("A.data");
您的命令.in
中有一个.data,您添加了.data
,然后您仍然使用文件名
,而不是名称
。相当混乱。将其全部更改为:
cout << "Open file: ==>\"" << name << "\"<==\n";
file.open(name.c_str());
cout
- 您是否忘记使用
文件名而不是名称
- 您是否检查了您的
名称
是否有尾随新行字符
记录它以确保您尝试打开正确的文件:
printf("filename: '%s'\n", filename.c_str());
此代码看起来不正常:
string name = filename + ".data";
// file.open(filename.c_str());
file.open("A.data");
您的命令.in
中有一个.data,您添加了.data
,然后您仍然使用文件名
,而不是名称
。相当混乱。将其全部更改为:
cout << "Open file: ==>\"" << name << "\"<==\n";
file.open(name.c_str());
cout检查以确保正在使用的文件与当前工作目录位于同一目录中。您可能需要提供fileObj.open(filename.c_str())代码>具有绝对路径,例如:
string filename=“C:\\Users\\Username\\Desktop\\filename.data”
如果该文件与当前工作目录不在同一目录中,并且您没有提供完全限定路径,则该错误将不断弹出
此外,请尝试将文件名编码为,以确保字符串中没有任何行终止符:
fileObj.open(“C:\\Users\\Username\\Desktop\\filename.data”)代码>检查以确保正在使用的文件与当前工作目录位于同一目录中。您可能需要提供fileObj.open(filename.c_str())代码>具有绝对路径,例如:
string filename=“C:\\Users\\Username\\Desktop\\filename.data”
如果该文件与当前工作目录不在同一目录中,并且您没有提供完全限定路径,则该错误将不断弹出
此外,请尝试将文件名编码为,以确保字符串中没有任何行终止符:
fileObj.open(“C:\\Users\\Username\\Desktop\\filename.data”)
在您尝试打开文件之前,是否可以打印您的名称
,以确保安全?。我以前打印过名称,并且名称完全相同。如果文件名为xxx.data
我将打印该文件以及连接,并且它们是相同的。在您尝试打开文件之前,是否可以打印您的名称
,以确保?。我以前打印过名称,并且名称完全相同。如果文件名是xxx.data,我会打印它和连接,它们是相同的。这里使用的名称是任意的。让我仔细检查一下我写的是什么意思……告诉你,我只加载代码。请给我一点时间,我必须从Linux虚拟机服务器传输。这里使用的名称是任意的。让我仔细检查一下我写的是什么意思……告诉你,我只加载代码。给我一点时间,我必须从Linux虚拟机服务器传输它是一台Linux机器,但它们绝对在同一个目录中。这就是为什么输入正确,但作为字符串传递不正确的原因。@JeffreyDilley名称来自何处并不重要,它们的解释方式相同。它不是相对于可执行文件的目录,而是相对于您当前的工作目录。@Barmar我理解。我肯定目录不是问题所在:/@Jon如果我只需要再次使用c_str来替换“filename.data”,我如何为我的filename.c_str()提供一个绝对路径?@Jon在Linux中它是/
它是一台Linux机器,但是的,它们绝对在同一个目录中。这就是为什么输入正确,但作为字符串传递不正确的原因。@JeffreyDilley名称来自何处并不重要,它们的解释方式相同。它不是相对于可执行文件的目录,而是相对于您当前的工作目录。@Barmar我理解。不过,我肯定目录不是问题所在:/@Jon如果我只需要再次使用c_str来替换“filename.data”,我如何为我的filename.c_str()提供一个绝对路径?@Jon在Linux中它是/