目前我使用的是:
#include <sys/stat.h>
#include "My_Class.h"
void My_Class::my_function(void)
{
std::ofstream my_file;
struct stat file_info;
if ( filename_str.compare("")!=0 &&
stat(filename_str.c_str(),&file_info) == 0 )
{
my_file.open(filename_str.data(),std::ios::trunc);
//do stuff
my_file.close();
}
else if ( filename_str.compare("")==0 )
{
std::cout << "ERROR! ... output filename not assigned!" << std::endl;
}
else
{
std::cout << "ERROR! File :" << std::endl
<< filename_str << std::endl
<< "does not exist!!" << std::endl;
}
}
......这是一个不错的方式,还是有更好的选择?如果我没有读取文件的权限,似乎我可以运行权限。
这不是一个功课,问题,这是一个关于最佳实践的问题。
答案 0 :(得分:4)
我使用boost :: filesystem结构。它们不仅是跨平台的,而且是下一个标准库的一部分。
答案 1 :(得分:3)
一般来说,我认为最好只是尝试打开它并发现错误。
IMO,检查权限是不明智的,因为如果它是一个Linux框并且你检查它的属性,决定你不能写它,但文件系统支持ACL,他们做授予你许可? (作为系统管理员,当应用程序执行此操作时,我无法站立。我喜欢ACL,如果您是应用程序,请不要告诉我除非您尝试过,否则无法写入文件第一。)
答案 2 :(得分:0)
从概念上讲,我会说这取决于你打算用这个文件做什么..
因此,作为一种最佳实践,我建议谨慎地打开文件(即,如果您不立即对内容感兴趣,请与基于文件属性的信息竞争),并严格按照实际情况处理故障调用,在您需要时打开文件。