当前位置:  开发笔记 > 编程语言 > 正文

检查C++中是否存在文件的最佳方法是什么?(跨平台)

如何解决《检查C++中是否存在文件的最佳方法是什么?(跨平台)》经验,为你挑选了7个好方法。

我已经阅读了什么是检查C中是否存在文件的最佳方法的答案?(跨平台),但我想知道是否有更好的方法来使用标准的c ++库?最好不要试图打开文件.

这两个stataccess是几乎ungoogleable.我#include该怎么用?



1> Andreas Magn..:

使用boost :: filesystem:

#include 

if ( !boost::filesystem::exists( "myfile.txt" ) )
{
  std::cout << "Can't find my file!" << std::endl;
}


Boost是一个库,其中最终将成为C++标准库的一部分.许多参与提升的人都是参与C++标准的人.因此,提升不仅仅是*任何*第三方库.如果您使用C++进行编程,则*应该*已经安装了boost!
似乎有点急于安装一个巨大的第三方库来做一些*应该*简单的事情

2> rlerallut..:

注意竞争条件:如果文件在"存在"检查和打开时间之间消失,程序将意外失败.

最好去打开文件,检查失败,如果一切都好,那么对文件做一些事情.对于安全性至关重要的代码,它更为重要.

有关安全性和竞争条件的详细信息:http: //www.ibm.com/developerworks/library/l-sprace.html



3> MattyT..:

我是一个快乐的推动用户,肯定会使用Andreas的解决方案.但是,如果您无法访问boost库,则可以使用流库:

ifstream file(argv[1]);
if (!file)
{
    // Can't open file
}

它不像boost :: filesystem :: exists那么好,因为文件实际上会被打开...但是那通常是你想要做的下一件事.


但是使用此代码,如果您没有该文件的权限,您也会跳转到if子句,尽管它存在.在大多数情况下,这无关紧要,但仍值得一提.

4> activout.se..:

如果跨平台足以满足您的需求,请使用stat().它不是C++标准,而是POSIX.

在MS Windows上有_stat,_stat64,_stati64,_wstat,_wstat64,_wstati64.



5> Rob..:

怎么样access

#include 

if (_access(filename, 0) == -1)
{
    // File does not exist
}



6> Samer..:

另一种可能性good()是在流中使用该函数:

#include      
bool checkExistence(const char* filename)
{
     ifstream Infield(filename);
     return Infield.good();
}



7> fizzer..:

我会重新考虑试图找出文件是否存在.相反,您应该尝试以您打算使用它的相同模式打开它(在标准C或C++中).知道文件是否存在有什么用处,比如说,当你需要使用它时它是不可写的?

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有