C操纵目录:如何通过在主参数中给出其名称来定位目录

我在C中操作目录时遇到了麻烦。

  1. 我想在main上给出2个目录的名称作为参数
  2. 检查第一个目录是否存在(在当前路径中)
  3. 打开目录
  4. 调用一个函数(我创建的)来创建文件并在目录中执行操作
  5. 关闭目录并进入第二个目录并执行相同操作。

我写了我的代码,但它仍然没有做我在main上的目录里面的东西,而是看起来我总是位于当前目录,所以打开目录的调用不好???

这就是我所做的:

int main(int argc, char *argv[]) { int i = 0; char cwd[1024]; if(argc < 3) { printf("Erreur dans les arguments\n"); } else { for(i = 1; i < argc; i++) { if (getcwd(cwd, sizeof(cwd)) == NULL) { printf("an error occured when getting current directory\n"); } // make a path to the directory strcat(cwd, "/"); strcat(cwd, argv[i]); strcat(cwd, "/"); printf("cwd %s\n", cwd); //check if directory exist and readable //if((rep = opendir(argv[i])) != NULL) not working also if((rep = opendir(cwd)) != NULL) { getcwd(cwd, sizeof(cwd)); printf("cwd %s\n", cwd); // do some stuff on the directory //int result = createFile("file.txt"); // this function works fine but the file is always created in the current directory } } } } 

如果有人可以提供帮助,我们将不胜感激。 感谢你。

这是一些有效的代码:

 #include  #include  #include  #include  #include  int main(int argc, char **argv) { int i = 0; char path[1024]; if (argc < 3) { fprintf(stderr, "Usage: %s dir1 dir2 [...]\n", argv[0]); exit(1); } for (i = 1; i < argc; i++) { DIR *rep; if ((rep = opendir(argv[i])) != NULL) { struct dirent *dp; while ((dp = readdir(rep)) != 0) { if (strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0) continue; printf("Name: %s/%s\n", argv[i], dp->d_name); } closedir(rep); snprintf(path, sizeof(path), "%s/%s", argv[i], "filename.txt"); FILE *fp = fopen(path, "w"); if (fp == 0) fprintf(stderr, "Failed to create file %s\n", path); else { fprintf(fp, "File %s created successfully\n", path); fclose(fp); } } } return 0; } 

示例运行:

 $ mkdir junk1 junk1/subdir junk2 junk2/subdir-too $ cp /dev/null junk1/forget-me-not $ cp /dev/null junk2/hallelujah-chorus $ ./dodir junk1 junk2 Name: junk1/forget-me-not Name: junk1/subdir Name: junk2/hallelujah-chorus Name: junk2/subdir-too $ ls -l junk? junk1: total 8 -rw-r--r-- 1 jleffler staff 45 Oct 25 00:11 filename.txt -rw-r--r-- 1 jleffler staff 0 Oct 25 00:11 forget-me-not drwxr-xr-x 2 jleffler staff 68 Oct 25 00:11 subdir junk2: total 8 -rw-r--r-- 1 jleffler staff 45 Oct 25 00:11 filename.txt -rw-r--r-- 1 jleffler staff 0 Oct 25 00:11 hallelujah-chorus drwxr-xr-x 2 jleffler staff 68 Oct 25 00:11 subdir-too $ rm -fr junk? $ 

opendir不会更改当前的工作目录。 它打开一个目录并为您提供一个句柄。

您需要调用chdir来实际更改当前工作目录。