c++ kopiowanie

0

witam. napisalem program ktory kopiuje zawartosc jednego pliku txt do drugiego.
probuje napisac teraz program ktory by tworzyl kopie samego siebie.
kopia powstaje aczkolwiek nie mozna jej uruchomic(wyskakuje komunikat iz nie ejst to poprawna aplikacjia 32). czy ktos mogl by mi powiedziec czy jest to w ogole mozliwe(nie korzystajac z asm) i ewentualnie naprowadzic?

0

ym.. jakos mi umknal jeden sposob:)
char zrob[255] = "cp plik c:/sciezka/plik";
system(zrob);
jednak chcialbym zrobic to w inny sposob. jest mozliwosc?

0

Jednym z prostszych sposobów jest wywołanie funkcji system() z odpowiednim poleceniem powłoki. Ale skoro uparłeś się zrobić to samemu od początku do końca to możesz spróbować czegoś takiego (u mnie działa na większości plików):

 ifstream plik_zrodlowy;
 ofstream plik_docelowy;
 char wczytany_znak;

 plik_zrodlowy.open("sciezka_dostepu");
 plik_docelowy.open("sciezka_dostepu");
 while ( !plik_zrodlowy.eof())
  {
    pilk_zrodlowy >> wczytany_znak;
    plik_docelowy << wczytany_znak;
// lub ta sama petla ale jako pojedyncza instrukcja:
// plik_doclowy << plik_zrodlowy.get(wczytany_znak);
  }
 plik_zrodlowy.close();
 plik_docelowy.close();
 } 

Oto najwazniejszy fragment kodu. Pisalem z glowy więc mogą być jakieś błedy ale po ich ewentualnym poprawieniu wszystko powino dzialać bez problemów.

Jak coś nie bedzie działać to dajcie znać</cpp>

0

no wlasnie robilem to w ten sposob:)
problem w tym ze gd uruchamiam plik_docelowy wyswietla i sie komunikat o bledzie (program wykona nie dozwolona operacje i zostanie zamkniety)
#include <iostream>
#include <fstream>

int main()
{
char buffer;

ifstream plik_zrodlowy;
ofstream plik_docelowy;
plik_zrodlowy.open("test1.exe",ios::binary,ios::nocreate);
plik_docelowy.open("c:/test2.exe",ios::binary,ios::noreplace);

while (!plik_zrodlowy.eof())
{

plik_zrodlowy >> buffer;
plik_docelowy << buffer;

}
plik_zrodlowy.close();
plik_docelowy.close();
return 0;
}
na c:\ moe znajduje sie plik test2.exe
uruchamiam test1.exe z dowolnego miejsca
tworzony jest plik c:\test2.exe
kopiuje pilk c:\test2.exe np do c:\test\test2.exe
kasuje plik c:\test2.exe
uruchamiam c:\test\test2.exe i wywala blad...
zalezy mi na tym sposobie poniewaz ma on mozliwosc ios::nocreate
i ios::noreplace
w przypadku gdy korzystam z system() tej mozliwosci nie mam

0

Twoj tok myslenia jest poprawny do pewnego momentu.

Jezeli uruchamiasz TEst2.exe z katalogu C:\Test, to on sie spodziewa, ze plik test1.exe jest w katalogu, z ktorego go wywolujesz, bo nie zaznaczyles zadnej sciezki dostepu do pliku Test1.exe ;)

0

przepraszam popelnilem blad w poprzednim poscie.
nazwa pliku zrodlowego i docelowego jest taka sama:)
plik jest tworzony, kopiowana jest do niego zawartosc tylko problem jest z jego uruchomieniem by wykonal ponownie to samo zadanie co plik swiezo po kompilacji
blad ktory sie pojawa po uruchomieniu pliku docelowego opisalem we wczesniejszym poscie

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