Я пытаюсь скопировать данные из одного файла в другой файл в UNIX с помощью «C». Условие во время копирования: 1) исходный файл не выходит 2) существует исходный файл, но файл целевого файла существует. 3) если источник и цель оба файла существуют, то выберите либо переписать целевой файл, либо добавить данные исходного файла в целевые данные файла.Скопировать данные одного файла в другой
Приведенный ниже код отлично подходит для первых двух случаев. Но не работает в последнем случае (перезаписывать и добавлять). Когда я запускаю программу и вхожу в существующий исходный файл, расположение целевого файла выбирает любой из параметров, которые программа сообщает, что данные были добавлены, но на самом деле данные не добавляются и не перезаписываются.
Скажите, пожалуйста, что делать, чтобы программа работала правильно для последнего случая.
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#define BUFFSIZE 512
#define PERM 0644
int main (int argc, char *argv[])
{
char buffer[BUFFSIZE];
int infile;
int outfile;
int choice;
size_t size;
if((infile = open(argv[1], O_RDONLY,0)) < 0)
{
printf("Source file does not exist\n");
return -1;
}
if((outfile=open(argv[2],O_WRONLY,PERM))>0)
{
// printf("Destination Fiel Exists , Do you wish to Overwrite or Appened destination file Data : \n Enter 1 to overwrite or ,\n 0 to Append \n");
scanf("%d",&choice);
if(choice==1)
{
if((outfile=open(argv[2],O_WRONLY|O_CREAT |O_EXCL, PERM))>=0)
{
printf("Destination file data is overwriten by source file data \n");
return -2;
}
}// end if (choice =1)
else
{
if(choice==0)
{
if((outfile=open(argv[2],O_WRONLY |O_CREAT |O_APPEND, PERM))>=0)
{
printf("Destination file data is appended with source file data : \n");
}
} // end if(choice==0)
else
{
printf("Entered invalid choice.: \n");
}
return -3;
}
}
else
{
if((outfile=open(argv[2],O_WRONLY | O_CREAT | O_EXCL,PERM))<0)
{
printf("Enter the desitination file along with source file \n");
return -4;
}
else {
printf(" Data has been copied to \t%s\n", argv[2]);
}
}
while ((size=read(infile, buffer, BUFFSIZE)) > 0)
{
write(outfile, buffer, size);
}
close(infile);
close(outfile);
return 0;
}
Я пробовал ваше предложение, пока оно не работает. – user2515280