C에서 dirent.h를 사용하여 파일 읽기 및 선택

어두운

마이크로 컨트롤러 프로그래밍을 처음 접하는데 문제가 있습니다.

USB에서 음악을 재생하는 장치를 만들려고합니다. USB에서 읽을 수 있지만 특정 파일을 선택하는 방법을 모릅니다. 나는 dirent.

지금까지 내 코드 :

while (true) {
    USBHostMSD msd("usb");
     //setup PWM hardware for a Class D style audio output
    PWMout.period(1.0/400000.0);

    // wait until connected to a USB device
    while(!msd.connect()) {
        Thread::wait(500);
    }

    FILE *wave_file;
    lcd.cls();
    lcd.locate(0,3);


    DIR *dir;
    struct dirent *ent;
    int i=0;
    int stevilo_datotek =0;


    dir = opendir ("/usb/");
    if (dir != NULL) 
    {


        while ((ent = readdir (dir)) != NULL) 
        {   
              lcd.printf ("%s\n", ent->d_name[0]);  
        }
}

이제이 코드는 USB에있는 내용을 표시합니다. 장치의 버튼을 사용하여 USB의 파일을 탐색하려면 어떻게합니까? 탐색 할 수 있도록 특정 노래에 특정 번호를 할당하는 방법이 있는지 알고 싶습니다. dirent.h너무 오랫동안 파일을 연구했는데 dirent파일 순서를 저장하는 위치 찾을 수 없습니다 (있는 경우).

드위 벌리

당신은 dirent.h의 목적을 혼란스럽게 할 수 있습니다. 요컨대 나무를 위해 숲을 보는 것이 어려울 수 있습니다.

정보 (ent-> d_name, ent-> d_name은 문자 배열에 대한 포인터이며 종종 '문자열'이라고 함)를 데이터 구조 (예 : 배열 또는 목록)로 읽은 다음 해당 구조를 사용할 수 있습니다. 버튼 누름을 감지하는 코드를 사용하여 인덱스를 배열 정보로 위 또는 아래로 이동합니다 (더 크거나 작은 인덱스로 인덱스가 범위 또는 구조를 벗어나지 않는지 확인하십시오). 또는 while 루프가 버튼을 누를 때까지 기다렸다가 파일 이름 만 읽는 코드를 만들 수 있습니다 (seekdir을 사용하여 뒤로 이동).

UPDATE (댓글에 대한 응답) : 파일 시스템은 다음과 같은 트리 구조임을 명심하십시오.

/ (root) +--- dir1 ----------------------------+- dir1.1
         ---- dir2 (empty)                     -- file1.1
         ---- dir3 ---- dir3.1 +--- file3.1
         ---- file1            ---- file3.2
         ---- file2

이를 처리하는 방법을 결정해야합니다. 하나의 디렉토리 만 지원할 것인지 (모든 음악 파일을 한 곳에 배치), 디렉토리 탐색을 허용 할 것인지, 아니면 재생 방법을 아는 파일 만 선택하여 모든 디렉토리를 살펴볼 것인지 결정해야합니다.

파일 (또는 하위 디렉토리)에는 상속 순서가 없으며 일부 시스템에서는 언제든지 파일을 추가하거나 삭제할 수 있습니다.

다음은 디렉토리 항목 목록을 유지하는 한 가지 방법에 대한 매우 간단한 예입니다.

char *names[400]; // make space for 400 names
int ix;
ix = 0;
if (dir != NULL) 
{
     while ((ent = readdir (dir)) != NULL) 
     {   
           lcd.printf ("%s\n", ent->d_name[0]);  
           // allocate memory to store the name
           names[ix] = (char*) malloc(strlen(ent->d_name)); // strlen from string.h 
                                                            // malloc from stdlib.h
           // copy the name from the directory entry
           strcpy(names[ix], ent->d_name); // strcpy from string.h
           ix++;
           if (ix >= 400) 
           {
               // do something because your array isn't big enough
           }
     }
}

이제 배열 '이름'에 이름이 있고 색인으로 주소를 지정할 수 있습니다. 값 'ix-1'은 성이고 0은 이름입니다. 버튼을 누르면 원하는 이름을 식별하는 이름 배열의 인덱스를 증가 / 감소시킬 수 있습니다. 이러한 이름 중 일부는 파일 이름이 아닌 디렉토리 이름 일 수 있습니다.

물론 이것은 단순한 생각입니다. 고정 된 값을 사용하는 대신 배열을 할당하고 싶을 수 있습니다 (실제로 'names'배열을 호출 함수에 전달하려면해야합니다). strcpy의 "보안"버전이 있습니다. (메모리 오버플로 손상을 방지하는 데 도움이 됨) 등이지만 이름을 메모리에 유지하는 방법에 대한 아이디어를 제공해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C에서 dirent 및 stat 구조체를 사용하여 모든 파일을 표시하는 방법

분류에서Dev

C에서 libpng를 사용하여 PNG 파일 읽기 및 쓰기

분류에서Dev

C ++의 파일에서 구분 기호를 사용하여 int 및 string 읽기

분류에서Dev

C ++에서 QDomElement 및 태그를 사용하여 XML 파일 읽기

분류에서Dev

filestream 및 streamreader를 사용하여 C #으로 파일 읽기

분류에서Dev

C # LINQ를 사용하여 CSV 파일 읽기 및 필터링

분류에서Dev

PHP 파일에서 데이터 가져 오기 및 JavaScript를 사용하여 선택한 데이터 인쇄

분류에서Dev

플라스크를 사용하여 서버에 json 파일 읽기 및 쓰기

분류에서Dev

QT : XML 파일 읽기 및 DOM 파서를 사용하여 파싱

분류에서Dev

pdfplumber 및 Paramiko를 사용하여 SFTP 서버에서 PDF 파일 읽기

분류에서Dev

fscanf 및 sscanf를 사용하여 파일에서 형식화 된 입력 읽기

분류에서Dev

Python 및 Javascript를 사용하여 Json 파일에서 읽고 쓰기

분류에서Dev

fscanf를 사용하여 C ++에서 int 및 float가있는 탭 파일에서 읽기

분류에서Dev

json 파일에 지정된 키를 사용하여 배열 쓰기 및 읽기

분류에서Dev

Perl은 파일에서 읽고 인쇄 및 inderect 핸들러를 사용하여 다른 파일에 쓰기

분류에서Dev

Jenkins 마스터 (헤드리스) 노드에서 기본 Windows 선택기를 사용하여 파일 선택

분류에서Dev

TinyXML2를 사용하여 C ++에서 XML 파일 읽기

분류에서Dev

C에서 fread를 사용하여 파일 읽기

분류에서Dev

C 코드를 사용하여 파일에서 문자 읽기

분류에서Dev

C에서 mmap 또는 fscanf를 사용하여 파일 읽기

분류에서Dev

read () c를 사용하여 파일에서 정수 읽기

분류에서Dev

scanf를 사용하여 C의 txt 파일에서 읽기

분류에서Dev

C : fgets ()를 사용하여 파일에서 읽기

분류에서Dev

C-fscanf를 사용하여 파일에서 '-1'읽기

분류에서Dev

Xcode : 선택기를 사용하여 이메일에 첨부 파일 추가

분류에서Dev

C를 사용하여 여러 CSV 파일간에 데이터 읽기, 번역 및 쓰기

분류에서Dev

노드 : 데이터 읽기, 변환 및 스트림 및 파이프를 사용하여 파일에 쓰기

분류에서Dev

Java를 사용하여 CSV 파일 읽기 및 쓰기

분류에서Dev

DOMDocument 읽기 및 CSS 선택기를 사용하여 요소 찾기

Related 관련 기사

  1. 1

    C에서 dirent 및 stat 구조체를 사용하여 모든 파일을 표시하는 방법

  2. 2

    C에서 libpng를 사용하여 PNG 파일 읽기 및 쓰기

  3. 3

    C ++의 파일에서 구분 기호를 사용하여 int 및 string 읽기

  4. 4

    C ++에서 QDomElement 및 태그를 사용하여 XML 파일 읽기

  5. 5

    filestream 및 streamreader를 사용하여 C #으로 파일 읽기

  6. 6

    C # LINQ를 사용하여 CSV 파일 읽기 및 필터링

  7. 7

    PHP 파일에서 데이터 가져 오기 및 JavaScript를 사용하여 선택한 데이터 인쇄

  8. 8

    플라스크를 사용하여 서버에 json 파일 읽기 및 쓰기

  9. 9

    QT : XML 파일 읽기 및 DOM 파서를 사용하여 파싱

  10. 10

    pdfplumber 및 Paramiko를 사용하여 SFTP 서버에서 PDF 파일 읽기

  11. 11

    fscanf 및 sscanf를 사용하여 파일에서 형식화 된 입력 읽기

  12. 12

    Python 및 Javascript를 사용하여 Json 파일에서 읽고 쓰기

  13. 13

    fscanf를 사용하여 C ++에서 int 및 float가있는 탭 파일에서 읽기

  14. 14

    json 파일에 지정된 키를 사용하여 배열 쓰기 및 읽기

  15. 15

    Perl은 파일에서 읽고 인쇄 및 inderect 핸들러를 사용하여 다른 파일에 쓰기

  16. 16

    Jenkins 마스터 (헤드리스) 노드에서 기본 Windows 선택기를 사용하여 파일 선택

  17. 17

    TinyXML2를 사용하여 C ++에서 XML 파일 읽기

  18. 18

    C에서 fread를 사용하여 파일 읽기

  19. 19

    C 코드를 사용하여 파일에서 문자 읽기

  20. 20

    C에서 mmap 또는 fscanf를 사용하여 파일 읽기

  21. 21

    read () c를 사용하여 파일에서 정수 읽기

  22. 22

    scanf를 사용하여 C의 txt 파일에서 읽기

  23. 23

    C : fgets ()를 사용하여 파일에서 읽기

  24. 24

    C-fscanf를 사용하여 파일에서 '-1'읽기

  25. 25

    Xcode : 선택기를 사용하여 이메일에 첨부 파일 추가

  26. 26

    C를 사용하여 여러 CSV 파일간에 데이터 읽기, 번역 및 쓰기

  27. 27

    노드 : 데이터 읽기, 변환 및 스트림 및 파이프를 사용하여 파일에 쓰기

  28. 28

    Java를 사용하여 CSV 파일 읽기 및 쓰기

  29. 29

    DOMDocument 읽기 및 CSS 선택기를 사용하여 요소 찾기

뜨겁다태그

보관