하위 - 리눅스 c++ 파일 찾기




C로 디렉토리 목록을 어떻게 얻습니까? (7)

opendir / readdir은 POSIX입니다. POSIX로 달성하려는 이식성이 충분하지 않으면 Apache Portable Runtime을 확인하십시오.

C에서 폴더 및 파일의 디렉토리를 어떻게 스캔합니까? 크로스 플랫폼이어야합니다.


늦었지만 나 자신을 붙잡을 수 없다고 생각합니다 ...

C int system(char*) 을 사용하면 "휴대용"C 인터페이스를 통해 모든 종류의 작업을 수행 할 수 있습니다. 시스템 특정 언어 (예 : Shell / Bash, DOS, PowerShell)로 응용 프로그램을로드해야하지만 최소한 추가 라이브러리를 링크 할 필요는 없습니다. 그리고 dirent 와 달리 모든 종류의 "플랫폼 독립적"작업을 수행 할 수 있습니다.

linux로 디렉토리를 나열하는 예 (대부분 의사) :

system("ls . > some_file_or_pipe_or_whatever") //
fscanf(file_or_pipe_or_whatever, "%s", a_line_from_ls);

디렉토리 목록은 고려중인 OS / 플랫폼에 따라 크게 다릅니다. 다양한 운영 체제가 자체 내부 시스템 호출을 사용하여이를 달성하기 때문입니다.

이 문제에 대한 해결책은이 문제를 숨기고 이식 가능한 라이브러리를 찾는 것입니다. 불행히도 모든 플랫폼에서 완벽하게 작동하는 솔루션은 없습니다.

POSIX 호환 시스템에서 라이브러리를 사용하여 Clayton (W. Richard Stevens의 UNIX 책의 Advanced Programming에서 원래 참조)이 게시 한 코드를 사용하여이를 달성 할 수 있습니다. 이 솔루션은 * NIX 시스템에서 작동하며 Cygwin을 설치 한 경우 Windows에서도 작동합니다.

또는 기본 OS를 감지하는 코드를 작성한 다음 해당 OS에서 디렉토리 구조를 나열하는 '적절한'방법을 보유하는 적절한 디렉토리 나열 함수를 호출 할 수 있습니다.


디렉토리에 파일을 열거하는 표준 C (또는 C ++) 방법은 없습니다.

Windows에서는 FindFirstFile / FindNextFile 함수를 사용하여 디렉토리의 모든 항목을 열거 할 수 있습니다. Linux / OSX에서는 opendir / readdir / closedir 함수를 사용하십시오.


폴더의 개념이 실제로 크로스 플랫폼이 아니기 때문에 엄격한 대답은 "할 수 없습니다"입니다.

MS 플랫폼에서는 'c'종류의 느낌에 _findfirst, _findnext 및 _findclose를 사용할 수 있으며 기본 Win32 호출에는 FindFirstFile 및 FindNextFile을 사용할 수 있습니다.

C-FAQ 답변은 다음과 같습니다.

http://c-faq.com/osdep/readdir.html


GLib 은 GTK + 그래픽 툴킷의 기초를 형성하는 C 용 이식성 / 유틸리티 라이브러리입니다. 독립형 라이브러리로 사용할 수 있습니다.

디렉토리 관리를위한 휴대용 랩퍼가 들어 있습니다. 자세한 내용은 Glib 파일 유틸리티 설명서를 참조하십시오.

개인적으로, 나는 GLib와 같은 것없이 많은 양의 C 코드를 작성하는 것을 고려하지 않을 것입니다. 이식성은 한 가지이지만 데이터 구조, 스레드 도우미, 이벤트, 메인 루프 등을 무료로 얻는 것도 좋습니다.

Jikes, 나는 거의 판매원처럼 들리기 시작했다 :) (걱정하지 마라, glib은 오픈 소스 (LGPL)이며 나는 어떤 식 으로든 제휴하지 않는다)


readdir 가장 유사한 방법은 아마도 알려진 _find 함수 계열을 사용하는 것입니다.





common-tasks