ฉันต้องการเขียนโปรแกรมที่ตรวจสอบการมีอยู่ของไดเร็กทอรี หากไม่มีไดเร็กทอรีนั้นจะสร้างไดเร็กทอรีและล็อกไฟล์ภายในไดเร็กทอรี แต่ถ้ามีไดเร็กทอรีอยู่แล้วก็จะสร้างไฟล์บันทึกใหม่ในโฟลเดอร์นั้น
ฉันจะทำสิ่งนี้ใน C กับ Linux ได้อย่างไร
ฉันต้องการเขียนโปรแกรมที่ตรวจสอบการมีอยู่ของไดเร็กทอรี หากไม่มีไดเร็กทอรีนั้นจะสร้างไดเร็กทอรีและล็อกไฟล์ภายในไดเร็กทอรี แต่ถ้ามีไดเร็กทอรีอยู่แล้วก็จะสร้างไฟล์บันทึกใหม่ในโฟลเดอร์นั้น
ฉันจะทำสิ่งนี้ใน C กับ Linux ได้อย่างไร
คำตอบ:
มองไปที่stat
การตรวจสอบถ้าไดเรกทอรีที่มีอยู่
และmkdir
เพื่อสร้างไดเร็กทอรี
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
struct stat st = {0};
if (stat("/some/directory", &st) == -1) {
mkdir("/some/directory", 0700);
}
คุณสามารถดูคู่มือของฟังก์ชันเหล่านี้ด้วยคำสั่งman 2 stat
andman 2 mkdir
mkdir
ภายใต้ Linux ต้องการพารามิเตอร์ที่สองmode
นอกเหนือจากpath
.
คุณสามารถใช้ mkdir:
#include <sys/stat.h>
#include <sys/types.h>
int result = mkdir("/home/me/test.txt", 0777);
ฉันต้องการเขียนโปรแกรมที่ (... ) สร้างไดเร็กทอรีและไฟล์ (... ) อยู่ข้างใน
เนื่องจากนี่เป็นคำถามที่พบบ่อยมากนี่คือรหัสสำหรับสร้างไดเรกทอรีหลายระดับและมากกว่าการโทร ฉันใช้นามสกุล gnu เพื่อพิมพ์ข้อความแสดงข้อผิดพลาดด้วย printf
void rek_mkdir(char *path) {
char *sep = strrchr(path, '/');
if(sep != NULL) {
*sep = 0;
rek_mkdir(path);
*sep = '/';
}
if(mkdir(path, 0777) && errno != EEXIST)
printf("error while trying to create '%s'\n%m\n", path);
}
FILE *fopen_mkdir(char *path, char *mode) {
char *sep = strrchr(path, '/');
if(sep) {
char *path0 = strdup(path);
path0[ sep - path ] = 0;
rek_mkdir(path0);
free(path0);
}
return fopen(path,mode);
}