如何在visual studio community 2015上打开输入文件,C?

新手上路,请多包涵

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

原文由 Stackoverflow 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 426
2 个回答

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

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

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

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

原文由 The Dark 发布,翻译遵循 CC BY-SA 3.0 许可协议

一、签字的文件

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 上的标头 <direct.h> ,但它会为您提供您想要找出的目录。

原文由 JVene 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题