我是C编程的新手,所以可能有一个简单的解决scheme,但我试图通过使用C中的循环在这些目录中创build多个目录和文件。例如,
directory1中
Directory2
我还没有实现循环,但我试图追加文件名到文件夹,以便我可以创build该文件。
我已经附上了代码,我知道错误是在第5行,我试图concatinstring。 有没有办法创build一个variables来存储目录的名称,并附加文件名到目录为了创build文件?
感谢您的帮助。
这是我迄今写的代码
char folder[] = "directory1/"; mkdir(folder, 0750); //Create text file in directory fPointer = fopen(folder + "text.txt", "w"); for(int i = 0; i < textLength; i++){ //Only return numbers from 0 - 25 int rnum = rand() % 26; //Use uppercase ascii values therefore add 65 text[i] = (char) (rnum +65); //Write to the file fprintf(fPointer,"%c",text[i]); } //Stop writing to text.txt and close connection fclose(fPointer);
在字符串的情况下,第一个C不支持+
运算符。 您需要使用strcat()
来连接C中的字符串 。更多的事情总是查看stat
用于检查目录是否存在, mkdir
用于创建目录。
以下代码工作
#include<stdio.h> #include<stdlib.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> int main(){ char folder[] = "directory1/"; char text[1024]; struct stat st = {0}; FILE *fPointer; if (stat(folder, &st) == -1) { mkdir(folder,0750); } //Create text file in directory strcat(folder,"text.txt"); fPointer = fopen(folder, "w"); int len=strlen(folder); for(int i = 0; i < len; i++){ //Only return numbers from 0 - 25 int rnum = rand() % 26; //Use uppercase ascii values therefore add 65 text[i] = (char) (rnum +65); //Write to the file fprintf(fPointer,"%c",text[i]); } //Stop writing to text.txt and close connection fclose(fPointer); return 0; }
关于你的例子中的第一行:
char folder[] = "directory1/";
结尾的“/”不需要创建目录directory1
。
该行:
fPointer = fopen(folder + "text.txt", "w");
没有做你期望的事情。 C使用字符串函数来操纵字符串,例如连接2个字符串。 ( #include <string.h>
)
给定一个位置,如:
char absoluteDir[] = "/user1/dir1/dir2/"; // copy to an absolute location, or char relativeDir[] = "../dir1/";// will go one dir up from location and copy to dir1
并创建一个文件名称为:
char filename[] = "text.txt";
使用其中一个字符串函数(如strcat或sprintf)将组件字符串连接到一个位置,如
char dirPathFileName[260];
例如:
sprintf(dirPathFileName, "%s%s", absoultDir, filename);
要么
strcat(dirPathFileName, relativeDir); strcat(dirPathFileName, filename);
这些将创建:
"/user1/dir1/dir2/text.txt"
要么
"../dir1/text.txt"
(Note: this requires call be made from a location where one directory up contains a sub-direcotry named 'dir1`)
这将作为函数fopen的第一个参数正常工作