如何打开输入文件,C++ on visual studio community 2015?
How to open input file, C++ on visual studio community 2015?
有谁知道为什么文件打不开?我也试过将 "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;
}
和
string fileloc = "infile.txt";
如果你把infile.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 中不同.
我不确定您为什么要确保您的程序仅按名称打开当前目录中的文件,而不提供完整路径,但是...
您可能想查询当前工作目录是什么,这样无论您在哪里尝试,都可以解开谜团。在我的 Visual Studio 2015 中,该目录最终成为调试目录,但这完全取决于您的项目是如何配置的,我们在这里看不到。
所以,尝试:
std::string cwd = getcwd( NULL, 0 );
这需要 header <direct.h>
on Windows in Visual Studio,但它会为您提供您要查找的目录。
注意目录结构(至少对于 VS2013)是
<base>
- Solution Directory
- Debug
- Release
- Project Directory
- Debug
- Release
该程序默认在项目目录中运行(即使它被构建到 solution/debug 目录)。
如果您在开始项目时接受了默认命名约定,您应该将文件放在 "Projects\ConsoleApplication1\ConsoleApplication1" 目录中,而不是 "Projects\ConsoleApplication1"
对于我的问题 - 我被 opencv 加载图像卡住 - 我错误地将带有 jpg 的目录放在 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;
}
和
string fileloc = "infile.txt";
如果你把infile.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 中不同.
我不确定您为什么要确保您的程序仅按名称打开当前目录中的文件,而不提供完整路径,但是...
您可能想查询当前工作目录是什么,这样无论您在哪里尝试,都可以解开谜团。在我的 Visual Studio 2015 中,该目录最终成为调试目录,但这完全取决于您的项目是如何配置的,我们在这里看不到。
所以,尝试:
std::string cwd = getcwd( NULL, 0 );
这需要 header <direct.h>
on Windows in Visual Studio,但它会为您提供您要查找的目录。
注意目录结构(至少对于 VS2013)是
<base>
- Solution Directory
- Debug
- Release
- Project Directory
- Debug
- Release
该程序默认在项目目录中运行(即使它被构建到 solution/debug 目录)。
如果您在开始项目时接受了默认命名约定,您应该将文件放在 "Projects\ConsoleApplication1\ConsoleApplication1" 目录中,而不是 "Projects\ConsoleApplication1"
对于我的问题 - 我被 opencv 加载图像卡住 - 我错误地将带有 jpg 的目录放在 C++ 项目的根目录中
错误:
正确: