簡體   English   中英

使用 C 打開目錄

[英]Open directory using C

我正在接受通過命令行輸入的路徑。

當我做

dir=opendir(args[1]);

它沒有進入循環...即dir==null ...

如何將命令行輸入傳遞給 dir 指針?

void main(int c,char **args)
{
    DIR *dir;
    struct dirent *dent;
    char buffer[50];
    strcpy(buffer, args[1]);
    dir = opendir(buffer);   //this part
    if(dir!=NULL)
    {
        while((dent=readdir(dir))!=NULL)
            printf(dent->d_name);
    }
    close(dir);
}

./a.out  /root/TEST is used to run the program..
./a.out --> to execute the program
/root/TEST --> input by the user i.e valid path

你真的應該發布你的代碼(a) ,但這里是。 從以下內容開始:

    #include <stdio.h>
    #include <dirent.h>

    int main (int argc, char *argv[]) {
        struct dirent *pDirent;
        DIR *pDir;

        // Ensure correct argument count.

        if (argc != 2) {
            printf ("Usage: testprog <dirname>\n");
            return 1;
        }

        // Ensure we can open directory.

        pDir = opendir (argv[1]);
        if (pDir == NULL) {
            printf ("Cannot open directory '%s'\n", argv[1]);
            return 1;
        }

        // Process each entry.

        while ((pDirent = readdir(pDir)) != NULL) {
            printf ("[%s]\n", pDirent->d_name);
        }

        // Close directory and exit.

        closedir (pDir);
        return 0;
    }

您需要檢查您的情況, args[1]已設置並引用實際目錄。 一個示例運行, tmp是我當前目錄下的一個子目錄,但您可以使用任何有效目錄,給我: testprog tmp

[.]
[..]
[file1.txt]
[file1_file1.txt]
[file2.avi]
[file2_file2.avi]
[file3.b.txt]
[file3_file3.b.txt]

另請注意,您必須傳入目錄,而不是文件。 當我執行:

testprog tmp/file1.txt

我得到:

Cannot open directory 'tmp/file1.txt'

那是因為它是一個文件而不是一個目錄(不過,如果你偷偷摸摸,如果初始diropen失敗,你可以嘗試使用diropen(dirname(argv[1])) )。


(a)現在已經更正了,但是,由於這個答案已被接受,我將假設這是您傳入的任何問題。

關於代碼段的一些反饋,但在大多數情況下,它應該可以工作......

void main(int c,char **args)
  • int main - 標准將main定義為返回一個int
  • cargs通常被命名為argcargv ,恭敬地,但你可以給它們命名任何東西

...

{
DIR *dir;
struct dirent *dent;
char buffer[50];
strcpy(buffer,args[1]);
  • 此處存在緩沖區溢出:如果args[1]長於 50 個字節,則buffer將無法容納它,並且您將寫入不應該寫入的內存。 我沒有理由在這里看到復制緩沖區,所以你可以通過不使用strcpy來回避這些問題......

...

dir=opendir(buffer);   //this part

如果返回NULL ,可能有以下幾個原因:

  • 該目錄不存在。 (你輸入對了嗎?里面有空格嗎,你輸入了./your_program my directory ,這會失敗,因為它試圖opendir("my")
  • 您缺乏對目錄的權限
  • 內存不足。 (這不太可能。)

傳遞給 C 程序可執行文件的參數只不過是一個字符串數組(或字符指針),因此在您的程序訪問這些參數之前,已經為這些輸入參數分配了內存,因此無需分配緩沖區,這樣您就可以避免程序中的錯誤處理代碼(減少段錯誤的機會:))。

這是使用c實現ls命令的簡單方法。 運行使用例如./xls /tmp

    #include<stdio.h>
    #include <dirent.h>
    void main(int argc,char *argv[])
    {
   DIR *dir;
   struct dirent *dent;
   dir = opendir(argv[1]);   

   if(dir!=NULL)
      {
   while((dent=readdir(dir))!=NULL)
                    {
        if((strcmp(dent->d_name,".")==0 || strcmp(dent->d_name,"..")==0 || (*dent->d_name) == '.' ))
            {
            }
       else
              {
        printf(dent->d_name);
        printf("\n");
              }
                    }
       }
       close(dir);
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM