【问题标题】:How to open input file, C++ on visual studio community 2015?如何在 Visual Studio Community 2015 上打开输入文件、C++?
【发布时间】:2015-09-18 03:32:33
【问题描述】:

有人知道为什么文件打不开吗?我还尝试将“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;
}

【问题讨论】:

  • 将文件放在Debugging > Working Directory中的目录中。

标签: c++ fstream


【解决方案1】:

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

<base>
   - Solution Directory
     - Debug
     - Release
     - Project Directory
       - Debug
       - Release

该程序默认运行在项目目录中(即使它构建到解决方案/调试目录)。

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

【讨论】:

  • 解决了!感谢您的帮助
【解决方案2】:

在项目设置 -> 调试中检查您的工作目录。在那里提供您的文件。

【讨论】:

    【解决方案3】:

    一、签字的文件

    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 中可能会有所不同。

    我不确定您为什么要确保您的程序仅在当前目录中按名称打开文件,而不是提供完整路径,但是...

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

    那么,试试吧:

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

    这需要 Visual Studio 中 Windows 上的标头 &lt;direct.h&gt;,但它会为您提供您想要找出的目录。

    【讨论】:

    • 为什么要硬编码资源文件的绝对路径?
    • 不确定您是否回答了正确的答案,但在我给出的答案中,资源文件的绝对路径不是硬编码的。实际上,OP 不想对路径进行硬编码,但在我自己关于这一点的问题中,我并没有问为什么 OP 不想对完整路径进行硬编码,只是为什么不指定完整路径。使用 getcwd 函数将允许一个基于 cwd 的完整路径,OP 很难找到该完整路径,从而导致选择显示该完整路径的错误。
    【解决方案4】:

    string fileloc = "infile.txt";
    

    如果你把infile.txt放在cpp文件的同一个文件夹下应该没问题。

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

    #include "stdafx.h"
    

    我使用的是 cygwin 控制台,可能有轻微差异

    【讨论】:

    • cpp 文件的位置和生成的可执行文件以及该可执行文件的工作目录是独立的东西。
    【解决方案5】:

    对于我的问题 - 我被 opencv 加载图像卡住了 - 我在 C++ 项目的根目录中放置带有 jpg 的目录是错误的

    错误:

    正确:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 2016-09-11
      相关资源
      最近更新 更多