有谁知道为什么文件没有打开?我也试过把#34; infile.txt"并将它放在程序的文件夹和调试文件夹中,但我用来检查打开错误的方式都触发意味着它无法打开。我知道我可以硬编码位置,但我不想。
我听说你应该做stringobj.c_str()
,但我不知道这是否准确?
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
ifstream infile;
ofstream outfile;
string fileloc = "infile.txt";
infile.open(fileloc);
if (!infile)
{
cout << "open fail 1" << endl;
}
bool fail = infile.fail();
if (fail)
{
cout << "open fail 2";
}
return 0;
}
答案 0 :(得分:5)
请注意,目录结构(至少对于VS2013)是
<base>
- Solution Directory
- Debug
- Release
- Project Directory
- Debug
- Release
默认情况下,程序在项目目录中运行(即使它是针对solution / debug目录构建的)。
如果在启动项目时接受了默认命名约定,则应将文件放在“Projects \ ConsoleApplication1 \ ConsoleApplication1”目录中,而不是“Projects \ ConsoleApplication1”
答案 1 :(得分:2)
检查项目设置中的工作目录 - &gt;调试。在那里提供您的文件。
答案 2 :(得分:2)
首先是
签名的文档std::ifstream::open( const char * filename, ios_base::openmode mode=ios_base::in)
确实表明它需要一个const char *,正是std :: string :: c_str()所提供的。然而,open有一个过载接受const str&amp;,这意味着它在大多数实现中都以相同的方式工作。
否则,您正在努力解决的问题被称为当前工作目录(或cwd)。显然你不确定那个目录在哪里。在Visual Studio上运行调试器时,可能与从命令行运行程序时的调试器不同,在各种IDE中可能有所不同。
我不确定你为什么要确保你的程序只在当前目录中按名称打开文件,而不是给出完整路径,但是......
您可能想查询当前工作目录是什么,这样您就可以在任何地方尝试解决这个问题。在我的Visual Studio 2015中,目录最终成为ABOVE调试目录,但这完全取决于项目的配置方式,我们在这里看不到。
所以,试试:
std::string cwd = getcwd( NULL, 0 );
这需要在Visual Studio中的Windows上使用标头<direct.h>
,但它会为您提供您想要弄清楚的目录。
答案 3 :(得分:1)
与
string fileloc = "infile.txt";
如果你将infile.txt放在cpp文件的同一个文件夹中,那应该没问题。
顺便说一下,我删除了你的第一行
#include "stdafx.h"
我使用cygwin控制台,可能会有轻微的差异