C에서 디렉토리 목록을 얻으려면 어떻게 해야 하나요?
디렉토리에서 C 폴더와 파일을 스캔하려면 어떻게 해야 합니까?크로스 플랫폼이어야 합니다.
다음의 POSIX 프로그램은, 현재의 디렉토리에 있는 파일의 이름을 인쇄합니다.
#define _XOPEN_SOURCE 700
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("./");
if (dp != NULL)
{
while (ep = readdir (dp))
puts (ep->d_name);
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}
크레딧 : http://www.gnu.org/software/libtool/manual/libc/Simple-Directory-Lister.html
Ubuntu 16.04로 테스트.
폴더라는 개념 자체가 진정한 크로스 플랫폼이 아니기 때문에 엄밀한 대답은 "할 수 없습니다"입니다.
MS 플랫폼에서는 findfirst, findnext 및 findclose를 사용하여 c의 느낌을 얻을 수 있으며 FindFirstFile 및 FindNextFile은 기본 Win32 콜에 사용할 수 있습니다.
C-FAQ의 답변은 다음과 같습니다.
http://c-faq.com/osdep/readdir.html
이 문제에 대처하는 오픈소스(BSD) C 헤더를 작성했습니다.현재 POSIX 및 Windows를 지원합니다.확인해 주세요.
https://github.com/cxong/tinydir
tinydir_dir dir;
tinydir_open(&dir, "/path/to/dir");
while (dir.has_next)
{
tinydir_file file;
tinydir_readfile(&dir, &file);
printf("%s", file.name);
if (file.is_dir)
{
printf("/");
}
printf("\n");
tinydir_next(&dir);
}
tinydir_close(&dir);
디렉토리의 파일을 열거하는 표준 C(또는 C++) 방법은 없습니다.
Windows 에서는, FindFirstFile/FindNextFile 함수를 사용하고, 디렉토리내의 모든 엔트리를 열거할 수 있습니다.Linux/OSX에서 opendir/readdir/closedir 함수를 사용합니다.
GLib는 GTK+ 그래픽 툴킷의 기반이 되는 C용 휴대성/유틸리티 라이브러리입니다.독립 실행형 라이브러리로 사용할 수 있습니다.
디렉토리 관리를 위한 휴대용 래퍼가 포함되어 있습니다.상세한 것에 대하여는, Glib File Utilities 의 메뉴얼을 참조해 주세요.
개인적으로는 뒤에 GLib 같은 것이 없으면 대량의 C-code를 쓸 생각도 하지 않습니다.휴대성도 중요하지만 데이터 구조, 스레드 헬퍼, 이벤트, 메인루프 등을 무료로 받을 수 있어 좋습니다.
이런, 거의 영업사원처럼 들리네요:) (걱정 마세요.glib은 오픈소스(LGPL)이기 때문에 저는 어떤 관계도 없습니다.)
opendir/readdir는 POSIX입니다.POSIX로 휴대성이 충분하지 않은 경우 Apache Portable Runtime을 선택하십시오.
디렉토리의 일람은, 검토중의 OS/플랫폼에 따라서 크게 다릅니다.이는 다양한 운영체계가 이를 위해 자체 내부 시스템 호출을 사용하기 때문입니다.
이 문제의 해결책은 이 문제를 숨기고 휴대할 수 있는 라이브러리를 찾는 것입니다.유감스럽게도 모든 플랫폼에서 완벽하게 작동하는 솔루션은 없습니다.
POSIX 호환 시스템에서는 Clayton이 게시한 코드(원래 W. Richard Stevens가 UNIX 책 아래의 Advanced Programming에서 참조)를 사용하여 라이브러리를 사용할 수 있습니다.이 솔루션은 *NIX 시스템에서 동작하며 Cygwin이 설치되어 있는 경우 Windows에서도 동작합니다.
또, 기반이 되는 OS 를 검출하는 코드를 작성해, 그 OS 로 디렉토리 구조를 「적절하게」 리스트 하는 방법을 보관 유지하는 적절한 디렉토리 리스트 함수를 호출할 수도 있습니다.
와 가장 유사한 방법readdir
아마 잘 알려지지 않은 기능군을 사용하고 있을 겁니다.
샘플 코드는 Wikibooks 링크에서 찾을 수 있습니다.
/**************************************************************
* A simpler and shorter implementation of ls(1)
* ls(1) is very similar to the DIR command on DOS and Windows.
**************************************************************/
#include <stdio.h>
#include <dirent.h>
int listdir(const char *path)
{
struct dirent *entry;
DIR *dp;
dp = opendir(path);
if (dp == NULL)
{
perror("opendir");
return -1;
}
while((entry = readdir(dp)))
puts(entry->d_name);
closedir(dp);
return 0;
}
int main(int argc, char **argv) {
int counter = 1;
if (argc == 1)
listdir(".");
while (++counter <= argc) {
printf("\nListing %s...\n", argv[counter-1]);
listdir(argv[counter-1]);
}
return 0;
}
언급URL : https://stackoverflow.com/questions/12489/how-do-you-get-a-directory-listing-in-c
'programing' 카테고리의 다른 글
Cookie 및 Vue-persist에서 만료 시간을 시간 또는 분으로 설정하려면 어떻게 해야 합니까?Vuex (0) | 2022.07.14 |
---|---|
className이 VueJS 메서드에서 작동하지 않음 (0) | 2022.07.14 |
매초 같은 액션에 대한 Vuex 커밋이 느리다 (0) | 2022.07.12 |
오류: "[vuex] 변환 핸들러 외부에 있는 vuex 저장소 상태를 변환하지 마십시오. (0) | 2022.07.12 |
vuex를 사용하여 페이지를 새로 고친 후에도 로그인 상태를 유지하는 방법 (0) | 2022.07.12 |