检查C ++中的文件存在

问题描述 投票:0回答:3
目前,我使用类似的东西:

#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 ::文件系统构造。 它们不仅是跨平台,而且是下一个标准库的一部分。

c++ file-io filesystems file-permissions
3个回答
4
投票
通常,我认为最好只是尝试打开它并捕获错误。

IMO,检查权限是不明智的,因为如果它是一个Linux框,并且您检查其属性,请确定您不能写入它,但是文件系统支持ACL,而它们

DO

3
投票
stand

。我喜欢ACL,如果您是应用程序,请不要告诉我,除非您先尝试

概念上,我会说这取决于您打算使用该文件的内容。 如果您需要它的内容,请继续尝试打开它,并准备好优雅地处理失败,因为Ken详细介绍了。 如果您当前对其内容不感兴趣(例如,当列举目录内容或仅计划在以后的某个时候访问文件时,等等),您可能会暂时检查属性。否则,诸如层次存储管理之类的令人讨厌的事情可能会触发昂贵的(缓慢)对磁带备份或网络的文件内容(而属性可能已被缓存)。您可以尝试通过检查相应的文件属性来避免这种情况,但这也是其他复杂性。

so作为最佳实践,我建议谨慎打开文件(即,如果您对内容不立即感兴趣,请与基于文件属性的信息争夺自己),并严格处理故障,以应对响应的实际呼叫需要时打开文件。

0
投票

由于C ++ 17

Filesystem
    可以使用,您应该使用此库。它提供std :: filesystem :: exists()call
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.