Program kopiujący zawartość jednego pliku do drugiego

0

Cześć.
Chciałbym napisać program, który kopiuje zawartość jednego pliku (np. ".txt") do pliku drugiego. Chciałbym też przy tym użyć przy tym funkcji "if", żeby było do wyboru nadpisywanie albo dopisywanie do istnieącego pliku. Jak na razie udało mi się tyle napisać, byłbym wdzięczny za pomoc.

#include<stdio.h>

void main()
{
FILE *plik1, *plik2, *plik3;
char nazwa[1000], tresc[1000], buff[1000];
int i,j;
printf("Wprowadz nazwe pliku: ");
gets(nazwa);
plik1 = fopen(nazwa, "w");
printf("Wprowadz tresc pliku: ");
gets(tresc);
fprintf(plik1, "%s", tresc);
fclose(plik1);
plik2 = fopen(nazwa, "r");
plik3 = fopen("kopia.txt", "w");
while( fgets(buff, 1000, plik2) != NULL)
    fprintf(plik3, "%s", buff);
fclose(plik2);
fclose(plik3);
printf("Tresc pliku: ");
plik3 = fopen("kopia.txt", "r");
while( fgets(tresc, 1000, plik3) != NULL)
    {
       printf("%s", tresc);
    }
 printf("\n");
 fclose(plik3);
}
0

W czym konkretnie problem? Użyj zatem if-a i w nim otwieraj plik albo do nadpisywania w (tak jak robisz to teraz), albo do dopisywania a.

Swoją drogą, nie bardzo rozumiem, po co Ci trzy pliki w tym wszystkim…

A, jeszcze taka drobna uwaga: prawdopodobnie chcesz bufor będący wielokrotnością 4096 bajtów, bo taki jest rozmiar sektora współczesnych dysków (powiedział Althorion, który ma wciąż w komputerze dwa 512 bajtowe dyski…).

0
Althorion napisał(a):

W czym konkretnie problem? Użyj zatem if-a i w nim otwieraj plik albo do nadpisywania w (tak jak robisz to teraz), albo do dopisywania a.

Swoją drogą, nie bardzo rozumiem, po co Ci trzy pliki w tym wszystkim…

A, jeszcze taka drobna uwaga: prawdopodobnie chcesz bufor będący wielokrotnością 4096 bajtów, bo taki jest rozmiar sektora współczesnych dysków (powiedział Althorion, który ma wciąż w komputerze dwa 512 bajtowe dyski…).

Dokładnie chodzi mi o to, że ten program dopisujący treść 1 pliku do drugiego dobrze działa, tylko gdy chcę go rozwinąć o możliwość wyboru czy ma dopisywać, czy nadpisywać plik to nie chce mi to działać.
Tutaj jest działający plik, który dopisuje treść z pierwszego pliku do treści drugiego:

#include<stdio.h>

void main()
{
   FILE *plik1, *plik2, *plik3;
   char nazwa[1000], tresc[1000], buff[1000];
   int i,j;
   printf("Wprowadz nazwe pierwszego pliku: ");
   gets(nazwa);
   plik1 = fopen(nazwa, "w");
   printf("Wprowadz tresc pierwszego pliku: ");
   gets(tresc);
   fprintf(plik1, "%s", tresc);
   fclose(plik1);
   plik2 = fopen(nazwa, "r");
   plik3 = fopen("kopia.txt", "w");
   fprintf(plik3, "To jest tresc drugiego pliku\n wraz z dopisana trescia z pierwszego pliku: ");
   while (fgets(buff, 1000, plik2) != NULL)
       fprintf(plik3, "%s", buff);
   fclose(plik2);
   fclose(plik3);
   printf("Tresc drugiego pliku: ");
   plik3 = fopen("kopia.txt", "r");
   while (fgets(tresc, 1000, plik3) != NULL)
       {
          printf("%s", tresc);
       }
   printf("\n");
   fclose(plik3);
}

A tu ten bardziej rozwinięty ale niedziałający program:

#include<stdio.h>

void main()
{
   FILE *plik1, *plik2, *plik3;
   char nazwa[1000], tresc[1000], buff[1000];
   int i,j;
   printf("Chcesz dopisac tresc do pliku- wybierz 1\nChcesz nadpisac tresc pliku- wybierz cokolwiek innego:\n");
   int wybor;
   scanf("%d", wybor);
   if (wybor == 1)
   {
   printf("Wprowadz nazwe pierwszego pliku: ");
   gets(nazwa);
   plik1 = fopen(nazwa, "w");
   printf("Wprowadz tresc pierwszego pliku: ");
   gets(tresc);
   fprintf(plik1, "%s", tresc);
   fclose(plik1);
   plik2 = fopen(nazwa, "r");
   plik3 = fopen("kopia.txt", "w");
   fprintf(plik3, "To jest tresc drugiego pliku\n wraz z trescia z pierwszego pliku: ");
   while (fgets(buff, 1000, plik2) != NULL)
       fprintf(plik3, "%s", buff);
   fclose(plik2);
   fclose(plik3);
   printf("Tresc drugiego pliku: ");
   plik3 = fopen("kopia.txt", "r");
   while (fgets(tresc, 1000, plik3) != NULL)
       {
          printf("%s", tresc);
       }
   printf("\n");
   fclose(plik3);
   }
   else
   {
   printf("Wprowadz nazwe pierwszego pliku: ");
   gets(nazwa);
   plik1 = fopen(nazwa, "w");
   printf("Wprowadz tresc pierwszego pliku: ");
   gets(tresc);
   fprintf(plik1, "%s", tresc);
   fclose(plik1);
   plik2 = fopen(nazwa, "r");
   plik3 = fopen("kopia.txt", "a");
   fprintf(plik3, "To jest tresc drugiego pliku\n wraz z trescia z pierwszego pliku: ");
   while (fgets(buff, 1000, plik2) != NULL)
       fprintf(plik3, "%s", buff);
   fclose(plik2);
   fclose(plik3);
   printf("Tresc drugiego pliku: ");
   plik3 = fopen("kopia.txt", "r");
   while (fgets(tresc, 1000, plik3) != NULL)
       {
          printf("%s", tresc);
       }
   printf("\n");
   fclose(plik3);
   }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1