C 操作目录:如何通过在主要参数中给出名称来定位目录
C manipulate directories : how to position at a directory by giving its name in main arguments
我在 C 中操作目录时遇到问题。
- 我想给出 2 个目录的名称作为 main
的参数
- 检查第一个目录是否存在(在当前路径)
- 打开目录
- 调用一个函数(我创建的)来创建文件并在里面做一些事情
目录
- 关闭目录并进入第二个目录并执行相同的操作。
我写了我的代码,但它仍然没有执行我在 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
}
}
}
}
如果有人能提供帮助,我们将不胜感激。谢谢
opendir
不改变当前工作目录。它打开
建立一个目录并为您提供它的句柄。
您需要调用 chdir
才能实际更改当前工作目录。
这是一些工作代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <dirent.h>
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?
$
我在 C 中操作目录时遇到问题。
- 我想给出 2 个目录的名称作为 main 的参数
- 检查第一个目录是否存在(在当前路径)
- 打开目录
- 调用一个函数(我创建的)来创建文件并在里面做一些事情 目录
- 关闭目录并进入第二个目录并执行相同的操作。
我写了我的代码,但它仍然没有执行我在 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
}
}
}
}
如果有人能提供帮助,我们将不胜感激。谢谢
opendir
不改变当前工作目录。它打开
建立一个目录并为您提供它的句柄。
您需要调用 chdir
才能实际更改当前工作目录。
这是一些工作代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <dirent.h>
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?
$