C ++에 파일이 있는지 확인하는 가장 좋은 방법은 무엇입니까? (크로스 플랫폼) 있는지 확인하는 가장 좋은 방법 은 무엇입니까?에

C에 파일이 있는지 확인하는 가장 좋은 방법무엇입니까?에 대한 답변을 읽었습니다 . (크로스 플랫폼) ,하지만 표준 C ++ 라이브러리를 사용하여이 작업을 수행하는 더 좋은 방법이 있는지 궁금합니다. 파일을 전혀 열지 않는 것이 좋습니다.

모두 stataccess거의 ungoogleable 있습니다. 이것을 어떻게 사용해야 #include합니까?



답변

사용 부스트 : : 파일 시스템 :

#include <boost/filesystem.hpp>

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

답변

경합 상태에주의하십시오. “존재”확인과 파일을 여는 시간 사이에 파일이 사라지면 프로그램이 예기치 않게 실패합니다.

가서 파일을 열고 실패를 확인한 다음 모든 것이 정상이면 파일로 무언가를하는 것이 좋습니다. 보안에 중요한 코드에서는 훨씬 더 중요합니다.

보안 및 경쟁 조건에 대한 세부 사항 :
http://www.ibm.com/developerworks/library/l-sprace.html


답변

나는 행복한 부스트 사용자이며 확실히 Andreas의 솔루션을 사용할 것입니다. 그러나 부스트 라이브러리에 액세스 할 수없는 경우 스트림 라이브러리를 사용할 수 있습니다.

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

파일이 실제로 열리기 때문에 boost :: filesystem :: exists만큼 좋지는 않지만 일반적으로 어쨌든 다음 작업을 수행합니다.


답변

필요에 따라 충분히 크로스 플랫폼 인 경우 stat ()를 사용하십시오. 그래도 C ++ 표준은 아니지만 POSIX입니다.

MS Windows에는 _stat, _stat64, _stati64, _wstat, _wstat64, _wstati64가 있습니다.


답변

어때요 access?

#include <io.h>

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

답변

또 다른 가능성은 good()스트림 에서 함수 를 사용하는 것입니다.

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

답변

파일이 존재하는지 알아 내려고 재검토 할 것입니다. 대신 사용하려는 것과 동일한 모드에서 (표준 C 또는 C ++에서) 열어야합니다. 파일을 사용해야 할 때 쓸 수없는 경우 파일이 존재한다는 것을 아는 것은 무슨 소용입니까?