我正试图逐个字符地移动一个字符数组,并将其复制到另一个字符阵列中,直到读取的字符为\,因为我想在未创建地址的情况下创建地址的目录,或者在创建地址的情况下访问地址。
例如:
Adress: dir2/dir3/a
我的算法:
path = dir2
//if dir2 not created make dir2 and change actual directory to dir2
//if created then access dir2 changing the actual directory to dir2
//empty path with memset and keep storing the adress
path = dir3
//repeat...
但当我尝试访问路径时,我会得到最后一个字符,而不是所有的路径字符串
输出:
path0: d
path1: i //Should be di
path2: r //Should be dir
path3: 2 //Should be dir2
path: 2 //Should be dir2
我不知道是否有更有效的方法可以做到这一点,我也不知道如何获得完整的路径字符串,而不是最后一个字符,我在末尾插入了"\0",以防字符串结尾字符出现问题
名称和路径是一个字符[256]变量
代码:
for (i = 0; i < strlen(name); i++)
{
if(name[i] != '/')
{
path[j] = name[i];
path[i+1] = ' ';
printf("path%d: %sn", i,path);
}
else
{
path[i] = ' ';
printf("path: %sn", path);
n = chdir(path);
if(n == ENOENT)
{
n = mkdir(path, 0777);
if (n != 0)
{
fprintf(stderr, "Failed to make the directory to extract: %sn", strerror(errno));
close(fmypack);
return E_DIR1;
}
chdir(path);
}
else if(n == EACCES)
{
fprintf(stderr, "Failed to access the directory: %s, %sn", path, strerror(errno));
close(fmypack);
return E_DIR2;
}
else if(n != 0)
{
fprintf(stderr, "Unknow error when try to access the directory: %s, %sn", path, strerror(errno));
close(fmypack);
return E_DESCO;
}
memset(path, 0, sizeof path);
j=0;
}
我想我找到了。
path[i] = ' ';
但路径是使用j
作为索引器建立的。
path[j] = ' ';
应该是正确的。
你错过了j
:上的增量
path[j] = name[i];
path[i+1] = ' ';
应为:
path[j++] = name[i];
path[j+1] = ' ';
有趣的是,用chdir()
一次只做一个组件实际上更快,但你发现这一点的可能性很小。当你有几百个目录时,你可以测量它。