Cześć :)
Muszę rozwiązać zadanie o takiej treści:
Zmodyfikuj program z zadania 3.3 Co dwa pliki, to nie jeden tak, aby kopiowanie odbywało się od końca pliku -- ostatni znak pliku źródłowego powinien być pierwszym znakiem pliku docelowego.
**Przykład interakcji z programem -- sukces (dla pliku wejściowego text.txt, plik wyjściowy tuo.txt):
Podaj sciezke do pliku:⏎
text.txt⏎
Podaj sciezke do pliku wyjściowego:⏎
tuo.txt⏎
File copied⏎
Uwaga
W programie nie wolno używać funkcji alokujacych pamięć.
W programie można zadeklarować tylko tablice na 30 znaków (do przechowywania nazw plików). Deklaracja musi wyglądać następująco: nazwa_zmiennej[31];.
W programie nie wolno używać operatora [].
Plik wyjściowy musi mieć taką samą liczbę bajtów co plik wejściowy.
Poprzednie zadanie polegające na kopiowaniu zawartości od początku do końca udało mi się rozwiązać w następujący sposób:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char tab[31]={0};
char input[31]={0};
char *tab_i=&(*(tab+0)), *input_i=&(*(input+0));
char tab2[31]={0};
char input2[31]={0};
char *tab_i2=&(*(tab2+0)), *input_i2=&(*(input2+0));
int i;
printf("Podaj sciezke do pliku\n");
scanf(" %31[^\n]", input_i);
for(i=0; i<30; i++)
{
*(tab_i+i)=*(input_i+i);
}
FILE *f= fopen(tab_i,"rb");
if(f==NULL)
{
printf("Couldn't open file");
return 4;
}
printf("Podaj sciezke do pliku wyjsciowego: \n");
scanf(" %31[^\n]", input_i2);
for(i=0; i<30; i++)
{
*(tab_i2+i)=*(input_i2+i);
}
FILE *f_2=fopen(tab_i2,"w+");
if(f_2==NULL)
{
fclose(f);
printf("Couldn't create file");
return 5;
}
char znak;
while(fread(&znak,1,1,f) != 0 )
{
fwrite(&znak,1,1,f_2);
}
fclose(f);
fclose(f_2);
printf("File copied");
return 0;
}
Tak więc kopiowanie kończyło się w momencie, gdy fread napotykał na koniec pliku i wartość zwracana była mniejsza od count (czyli mniejsza od jeden, a tym samym de facto równa 0). Obecnie zastanawiam się jak mogę przeprowadzić ten sam proces tylko z kopiowaniem od końca, czuję, że dobrym rozwiązaniem byłoby posłużenie się funkcją fseek().
Tylko jeżeli tak to pojawia się pytanie. Czy to będzie dobra metoda? Jeśli tak to jak mogę ją rozwinąć ( fseek()-a ogarniałem dotychczas tylko w kwestii przesuwania kursora odczytu/zapisu danych na początek i koniec)? Z góry dziękuję za wszelkie odpowiedzi.