Я пытаюсь скопировать файлы из каталога в существующий каталог с помощью opendir и readdir, но когда я выполняю свой код, у меня возникает ошибка открытого сбоя в функции копирования, я не понимаю, потому что мой x - это символ *, и когдая печатаю его, он дает мне нужный файл, и я также не знаю, как сделать путь к новому каталогу, куда я хочу скопировать мои файлы. если кто-то может помочь. Спасибо.
.
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
void copie (char* source, char* dest)
{
/* ETAPE 1 */
//Creation du buffer de taille 4096.
char buf [4096];
//Ouverture du fichier a lire et recuperation de son Id fs.
int fs=open(source, O_RDONLY);
//Ouverture du fichier a écrire et recuperation de son Id fd.
//Avec parametres de gestion d'erreur et creation de ce fichier si il n'existe pas.
int fd=open(dest, O_WRONLY|O_CREAT|O_EXCL|O_APPEND, 0666);
//Test en cas d'échec l'ouverture du fichier a lire.
if (fs==-1) {
printf("\n open() failed \n");
exit(1);
}
//Lecture avec read en lui passant en parametre l'Id du fichier a lire le buffer et la taille du buffer.
int size = read (fs,buf,sizeof(buf));
//Ecriture avec write en lui passant en parametre l'Id du fichier a écrire le buffer et la taille du fichier récupéré par read.
write (fd,buf,size);
//Test de fin du fichier.
buf[4096]= '\0';
//Pour le test: printf ("buffer: %s", buf);
/* ETAPE 2 */
struct stat statut;
//fstat récupère l'état du fichier pointé par le descripteur fs et remplit le tampon statut.
fstat(fs,&statut);
//fchmod modifie les droit d'acces du fichier fd, tels qu'ils soient les meme que ceux de fs.
fchmod(fd,statut.st_mode);
//Fermeture des fichiers.
close (fd);
close (fs);
}
void copieRepertoire (char* rsource, char* rdest)
{
DIR *rs = opendir(rsource);
DIR *rd = opendir(rdest);
struct dirent *sd;
if (rs == NULL || rd == NULL){
printf("Opendir() failed");
exit(1);
}
while ((sd=readdir(rs)) != NULL){
printf(" voila %s", sd ->d_name);
if (sd ->d_type == DT_REG) {
char *x = sd -> d_name;
printf(" voila %s", x);
// copie (x,"rdest"/???);
}
}
closedir(rs);
closedir(rd);
}
int main(int argc, char *argv[])
{
copie("tes.txt","tese.txt");
copieRepertoire ("rsource","rdest");
}