我有一个创建和处理文件的程序。怎么能告诉prgram从一个子目录中读取一个文件并在另一个子下直接保存另一个文件,这是我试过的:
#include <stdio.h>
#include <sys/stat.h>
int main (){
char fileName1[10];
char fileName2[10];
FILE *in=NULL,*out=NULL;
// making directory , input directotry exist as subdir in Program folder
mkdir("ouput", 777);
fileName1="//input//test";
fileName ="//output//out1";
........................
}
尝试打开文件后没有任何反应,并且尚未创建直接文件。任何暗示我该怎么做! 的更新 现在该目录已创建,但其中的文件是否?
更新 我的fileName有任何索引,所以这就是我正在做的事情:
while((access(fileName,F_OK)!=-1)){ // check if the file already exist
sprintf(fileName,"./output/sample%d",index++);
}
目录的制作工作但是在dir中制作文件是程序崩溃的问题
答案 0 :(得分:2)
fileName1="./output/sample.txt";
在这里考虑输出是目录名称。也可以指定相对路径来打开文件。
答案 1 :(得分:1)
...
char fileName1[10];
char fileName2[10];
... mkdir(“ouput”,777);
正如评论中指出的那样,应该是0777,你真的应该检查返回值。
fileName1="//input//test";
filename1当前是一个字符数组,但您现在将其指向一个字符串,该字符串可能位于只读内存中。您应该尝试使用-Wall进行编译。此外,显然预计此文件将存在于文件系统的根目录中。
fileName ="//output//out1";
再一次。您可能希望将这些声明为char const *
或将字符串复制到缓冲区(需要更大)。
答案 2 :(得分:0)
要从c程序创建目录,您必须指定一个umask。来自here的引用:
创建新文件或目录时,它的一些权限是 限制,不能设置。每个流程都有一组限制 调用umask,你必须使用umask系统调用来禁用或 启用这些限制。
因此,如果您不希望对该目录的权限进行限制,请将umask指定为0.稍后,您必须将umask设置为以前的值。
一个完整的程序,它在当前路径中创建目录,在创建的目录中创建两个文件:
#include <stdio.h>
#include <sys/stat.h>
#include <string.h>
int main(void)
{
mode_t process_mask = umask(0);
mkdir("test",0777);
umask(process_mask);
char filename[50] = "./test/file1";
char filename2[50] = "./test/file2";
FILE* file1;
FILE* file2;
file1 = fopen(filename, "w");
file2 = fopen(filename2, "w");
fclose(file1);
fclose(file2);
return 0;
}