Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在动态创建的目录中创建文件?_C_Linux - Fatal编程技术网

C 如何在动态创建的目录中创建文件?

C 如何在动态创建的目录中创建文件?,c,linux,C,Linux,我需要在动态创建的目录中复制文件。代码如下: FILE *fp, *source, *target; int i, j, k, counter; char str[256], str1[256]; char ch; const char *a[5]; a[1] = "submit.sh"; a[2] = "run.prm"; a[3] = "name.txt"; a[4] = "prot.pdb"; for (i=1; i<=4; i++) { sprintf(str,"

我需要在动态创建的目录中复制文件。代码如下:

FILE *fp, *source, *target;
int i, j, k, counter;
char str[256], str1[256];
char ch;
const char *a[5];

a[1] = "submit.sh";
a[2] = "run.prm"; 
a[3] = "name.txt"; 
a[4] = "prot.pdb"; 

for (i=1; i<=4; i++)
{
    sprintf(str,"%s_%d",cur_folder, i);
    mkdir(str,"w"); 
    for (j=1;j<3;j++)
    {
        sprintf(str,"%s%s",cur_folder, a[j]);
        source = fopen(str, "r");
        if( source == NULL ) 
        {
            printf("Error in energies_step, can't open file source \n");
            return USERERR;
        }
        sprintf(str,"/home/salah/proteins/1L2Y/try5_4changes/_%d/%s",i,a[j]);
        target = fopen(str, "w");
        if( target == NULL ) 
        {
            fclose(source);
            printf("Error in energies_step, can't open file target %s \n",str);
            return USERERR;
        }
        while( ( ch = fgetc(source) ) != EOF )
            fputc(ch, target);
    }
}
文件*fp,*source,*target;
int i,j,k,计数器;
char-str[256],str1[256];
char ch;
常量字符*a[5];
a[1]=“submit.sh”;
a[2]=“run.prm”;
a[3]=“name.txt”;
a[4]=“prot.pdb”;

对于@MarkPlotnick在其评论中提到的(i=1;i),此行不正确:

mkdir(str, "w");
但不是为文件权限编写明确的数字,例如:

mkdir(str, 0755);
mkdir(str, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
最好使用相应的符号常量,例如:

mkdir(str, 0755);
mkdir(str, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
可以找到更好地使用符号常量的原因:

警告:为文件权限写入显式数字是一种不好的做法。它不仅不可移植,而且还要求每个读取程序的人记住位的含义。要使程序干净,请使用符号名


符号常量在头文件sys/stat.h中定义。

是否(不是)缺少
main()
在这里?如果目录不存在,您需要创建它们,看起来您可以用python或其他东西做得更好,除非这嵌入到其他代码中,否则没有理由用c做。请使用基于0的数组索引。什么是
cur_folder
?我希望您知道c使用基于0的索引,对吗?编译器给了您答案吗关于mkdir的第二个参数类型不正确的任何警告?我认为它应该类似于
0755
,而不是
“w”
。您能检查调用
mkdir
的返回值吗?