Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何打开输入文件,C++;关于visual studio社区2015?_C++_Fstream - Fatal编程技术网

C++ 如何打开输入文件,C++;关于visual studio社区2015?

C++ 如何打开输入文件,C++;关于visual studio社区2015?,c++,fstream,C++,Fstream,有人知道为什么文件没有打开吗?我还试着把“infle.txt”放在程序文件夹和调试文件夹中,但我用来检查打开错误的方法都触发了,这意味着它无法打开。我知道我可以硬编码位置,但我不想 我听说你应该做stringobj.c_str(),但我不知道这是否准确 #include "stdafx.h" #include <iostream> #include <string> #include <fstream> using namespace std; int m

有人知道为什么文件没有打开吗?我还试着把“infle.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;
}
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std;
int main()
{
河流充填;
出流孔的直径;
字符串fileloc=“infle.txt”;
填充打开(fileloc);
如果(!infle)
{
不能

如果将infle.txt放在cpp文件的同一文件夹中,应该可以

顺便说一句,我删除了你的第一行

#include "stdafx.h"

我使用cygwin控制台,可能会有一些小差异,请在“项目设置”->“调试”中检查您的工作目录。请在那里提供您的文件。

首先,请参阅

std::ifstream::open( const char * filename, ios_base::openmode mode=ios_base::in)
确实表明它需要一个const char*,这正是std::string::c_str()提供的。但是,open有一个重载,它接受const str&,这意味着在大多数实现中,这两种方法的工作方式相同

否则,您要处理的就是当前工作目录(或cwd)。显然,您不确定该目录在哪里。在Visual Studio上运行调试器时,它可能与从命令行运行程序时不同,在不同的IDE中也可能不同

我不知道你为什么要确保你的程序只在当前目录中按名称打开一个文件,而不给出完整路径,但是

您可能想查询当前工作目录是什么,这样无论您在哪里尝试都可以解开这个谜团。在my Visual Studio 2015中,该目录最终是调试上方的目录,但这完全取决于您的项目是如何配置的,我们在这里看不到这一点

因此,请尝试:

std::string cwd = getcwd( NULL, 0 );

在Visual Studio中的Windows上,这需要一个标题
,但它将为您提供您试图找出的目录。

请注意,目录结构(至少对于VS2013)是


-解决方案目录
-调试
-释放
-项目目录
-调试
-释放
默认情况下,程序在项目目录中运行(即使它构建在解决方案/调试目录中)


如果启动项目时接受默认命名约定,则应将文件放在“Projects\ConsoleApplication1\ConsoleApplication1”目录中,而不是“Projects\ConsoleApplication1”

将文件放在调试>工作目录的目录中。cpp文件和生成的可执行文件以及该可执行文件的工作目录的位置是独立的。这就解决了问题!感谢帮助为什么要硬编码资源文件的绝对路径?不确定是否回答正确,但在我给出的答案是,资源文件的绝对路径不是硬编码的。事实上,OP不想硬编码路径,但在我自己关于这一点的问题中,我不是问OP为什么不想硬编码完整路径,只是为什么不指定完整路径。使用getcwd函数可以根据cwd生成完整路径,OP很难找到它,导致选择显示完整路径的错误。
std::string cwd = getcwd( NULL, 0 );
<base>
   - Solution Directory
     - Debug
     - Release
     - Project Directory
       - Debug
       - Release