[英]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
。c
和args
通常被命名為argc
和argv
,恭敬地,但你可以給它們命名任何東西...
{
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.