Hej, napisałem prosty program do kopiowania plików, ale działa on jedynie wtedy gdy uruchamiam go z konsoli (jak parametr podaję plik do skopiowania). Nie działa jeżeli korzystam z metody przeciągnij i upuść w windowsie. Wtedy efektem działania programu jest:"Bląd otwarcia pliku docelowego".
Myślę że problem sprawia tutaj funkcja łącząca napisy,
strcat(h,argv[1]);
ponieważ gdy zamiast argv[1]
podaję np. <code class="c"> "napis"
to wszystko działa jak należy (ale wiadomo że nie o to tutaj chodzi). Przypisywałem 'argv[1]' do zmiennej typu 'const char' efekt był taki sam.
Oto kod programu:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *skad, *dokad;
char ch;
char h[80]="kopia_";
/*sprawdzenie liczby argumentów*/
if(argc!=2)
{
printf("zla liczba argumentow");
system("PAUSE");
exit(1);
}
/*ŁĄCZENIE NAPISÓW*/
strcat(h,argv[1]);
/*otwieranie pliku źródłowego*/
if((skad=fopen(argv[1],"rb"))==NULL)
{
printf("Blad otwarcia pliku zrodlowego\n");
system("PAUSE");
exit(1);
}
/*otwieranie docelowego*/
if((dokad=fopen(h,"wb"))==NULL)
{
printf("Blad otwarcia pliku docelowego\n");
system("PAUSE");
exit(1);
}
/*kopiowanie pliku*/
while(!feof(skad))
{
ch=fgetc(skad);
if(ferror(skad))
{
printf("Blad odczytu pliku zrodlowego\n");
system("PAUSE");
exit(1);
}
if(!feof(skad)) fputc(ch, dokad);
if(ferror(dokad))
{
printf("Blad zapisu pliku docelowego\n");
system("PAUSE");
exit(1);
}
}
/*zamykanie plikow*/
if(fclose(skad)==EOF)
{
printf("blad zamkniecia pliku zrodlowego\n");
system("PAUSE");
exit(1);
}
if(fclose(dokad)==EOF)
{
printf("blad zamkniecia pliku docelowego\n");
system("PAUSE");
exit(1);
}
return 0;
}