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
的返回值吗?