C에 파일이 있는지 확인하는 가장 좋은 방법 은 무엇입니까?에 대한 답변을 읽었습니다 . (크로스 플랫폼) ,하지만 표준 C ++ 라이브러리를 사용하여이 작업을 수행하는 더 좋은 방법이 있는지 궁금합니다. 파일을 전혀 열지 않는 것이 좋습니다.
모두 stat
와 access
거의 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 ++에서) 열어야합니다. 파일을 사용해야 할 때 쓸 수없는 경우 파일이 존재한다는 것을 아는 것은 무슨 소용입니까?