#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;
}
}
...这是一个不错的方法,还是有更好的选择? 如果我没有阅读文件的权限,似乎我可以在权限上运行权限。
这不是作业,问题,这是关于最佳实践的问题。
我将使用boost ::文件系统构造。 它们不仅是跨平台,而且是下一个标准库的一部分。
IMO,检查权限是不明智的,因为如果它是一个Linux框,并且您检查其属性,请确定您不能写入它,但是文件系统支持ACL,而它们
DO。我喜欢ACL,如果您是应用程序,请不要告诉我,除非您先尝试
概念上,我会说这取决于您打算使用该文件的内容。 如果您需要它的内容,请继续尝试打开它,并准备好优雅地处理失败,因为Ken详细介绍了。 如果您当前对其内容不感兴趣(例如,当列举目录内容或仅计划在以后的某个时候访问文件时,等等),您可能会暂时检查属性。否则,诸如层次存储管理之类的令人讨厌的事情可能会触发昂贵的(缓慢)对磁带备份或网络的文件内容(而属性可能已被缓存)。您可以尝试通过检查相应的文件属性来避免这种情况,但这也是其他复杂性。
so作为最佳实践,我建议谨慎打开文件(即,如果您对内容不立即感兴趣,请与基于文件属性的信息争夺自己),并严格处理故障,以应对响应的实际呼叫需要时打开文件。由于C ++ 17
Filesystem