C++基础文件i/o,读取失败
C++ basic file i/o, failure to read
我正在尝试从教科书中复制一个练习,但是该文件从未读取过,因此触发了 if 语句,告诉我我还没有读取该文件。我没有错误消息或警告。我确信我错过了一些基本的东西,但我只是不知道它可能是什么......
我是 运行 OSX,Clang7.0,使用 Qt(但我也在 sublime text 中尝试过,但也失败了)
代码如下:
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
ifstream file_reader ( "myfile.txt" );
if ( !file_reader.is_open() )
{
cout<<"Could not open file!"<<'\n';
}
int number;
file_reader >> number;
cout<<number;
}
该文件与程序文件位于同一目录中。
这是一个 .txt 文件,仅包含:
12 a b c
我试过输入完整路径并查看了一些类似的线程,但它似乎与 this
的问题不同
提前感谢您的帮助
正如其他人所指出的,许多 IDE 在其他目录中编译您的程序,但它们通常还提供一种将所需文件复制到同一位置的方法。 Xcode 就是一个很好的例子。如果您找到了您的程序的创建位置,请将 myfile.txt
放入该目录,以 `./myprogram' 调用您的程序,您的代码将运行。
如果您想查看您的程序 运行 来自哪个目录,您可以使用 getenv("PWD")
查找工作目录,然后用它做任何您需要做的事。
#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
cout << "PWD = " << getenv("PWD") << endl; // Inspect working directory
ifstream file_reader ( "myfile.txt" );
if ( !file_reader.is_open() )
{
cout << "Could not open file!" << endl;
return -1; // If the file wasn't opened, there's no point in going on
}
int number;
file_reader >> number;
cout << number << endl;
return 0; // Always return 0 from main() if successful
}
如您所见,OS X 上的 Documents
位于您的主目录中,类似于 /Users/myusername
。如果您的路径或文件名包含空格或特殊字符,则 shell 中需要双引号,但在您的程序内部(即您的 ifstream()
初始化)则不需要,因为不会解释该参数通过 shell。 ~
同样由 shell 解释,但不由标准库或内核解释,这就是为什么在程序中使用它不起作用的原因:~/
不是目录名称。
我正在尝试从教科书中复制一个练习,但是该文件从未读取过,因此触发了 if 语句,告诉我我还没有读取该文件。我没有错误消息或警告。我确信我错过了一些基本的东西,但我只是不知道它可能是什么...... 我是 运行 OSX,Clang7.0,使用 Qt(但我也在 sublime text 中尝试过,但也失败了)
代码如下:
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
ifstream file_reader ( "myfile.txt" );
if ( !file_reader.is_open() )
{
cout<<"Could not open file!"<<'\n';
}
int number;
file_reader >> number;
cout<<number;
}
该文件与程序文件位于同一目录中。 这是一个 .txt 文件,仅包含:
12 a b c
我试过输入完整路径并查看了一些类似的线程,但它似乎与 this
的问题不同提前感谢您的帮助
正如其他人所指出的,许多 IDE 在其他目录中编译您的程序,但它们通常还提供一种将所需文件复制到同一位置的方法。 Xcode 就是一个很好的例子。如果您找到了您的程序的创建位置,请将 myfile.txt
放入该目录,以 `./myprogram' 调用您的程序,您的代码将运行。
如果您想查看您的程序 运行 来自哪个目录,您可以使用 getenv("PWD")
查找工作目录,然后用它做任何您需要做的事。
#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
cout << "PWD = " << getenv("PWD") << endl; // Inspect working directory
ifstream file_reader ( "myfile.txt" );
if ( !file_reader.is_open() )
{
cout << "Could not open file!" << endl;
return -1; // If the file wasn't opened, there's no point in going on
}
int number;
file_reader >> number;
cout << number << endl;
return 0; // Always return 0 from main() if successful
}
如您所见,OS X 上的 Documents
位于您的主目录中,类似于 /Users/myusername
。如果您的路径或文件名包含空格或特殊字符,则 shell 中需要双引号,但在您的程序内部(即您的 ifstream()
初始化)则不需要,因为不会解释该参数通过 shell。 ~
同样由 shell 解释,但不由标准库或内核解释,这就是为什么在程序中使用它不起作用的原因:~/
不是目录名称。