Kopiowanie i wklejanie

0

Witam - mam do was takie pytanie. Potrzebuje wiedzieć jak zrobić taki program który po uruchomieniu pobierze własną scieżke i przekopiuje się / przeniesie się (przenieść podczas działania raczej nie ale przekopiować :) ) do innego katalogu wskazanego wcześniej w programie. Szukałem dosyć dużo ale nic takiego nie znalazłem. Z góry dzięki za pomoc. Znalazłem jedynie pobieranie ścieżki pliku ale nie wiem czy to jest dobre :) Application.ExeName; ale teraz jak ta ścieżkę dodać tak żeby się z niej kopiowało ??

0

Program sam chyba usunąć się nie może (przynajmniej tak mi się wydaje), to tak jakbyś chciał zjeść sam siebie ;) Musi mu w tym pomóc inny program lub plik wsadowy (przynajmniej ja bym tak to zrobił). Kod podający ścieżkę do programu to

application.ExeName

Natomiast do kopiowania pliów służy instrukcja CopyFile(PlikŹródłowy, PlikDocelowy, true);

0

@Klocek94: funkcją CopyFile skopiujesz plik. Pierwsze dwa parametry to
PChary skąd dokąd, a ostatni możesz ustawić na false. Co do usuwania z
dysku uruchomionej kopii to może generowanie oraz zapis jakiegoś pliku
.bat i później jego wywołanie, po czym zakmnięcie programu. Tylko, że
nadal jest problem, bo trzeba jakoś zmusić skrypt, aby chwilkę odczekał.

0

Dokładnie. A co do CopyFile to ostatni parametr określa czy, gdu istnieje już taki plik, zastąpić go (true) czy też nie (false).

0

Opisze to trochę inaczej :) Nie chodzi mi o to żeby tamten plik sam się usuną :) Otwieram ten plik i po otwarciu plik ma sam siebie przekopiować do innego katalogu (który pokarze wcześniej - podczas programowani). Tym oto sposobem jeden plik będzie w jednym miejscu a drugi tam gdzie będę chciał żeby był :P

0

Czy ja tam wyżej napisałem że chcę usunąć ten plik ??

0

Nie wiem czy wiesz, ale przenoszenie polega najpierw na kopiowaniu a pozniej na usuwaniu, stąd ta moja wzmianka na temat usuwania ;). A więc sprawa wygląda banalnie. Dla zdarzenia OnShow (czy OnCreate) formy głównej wpisz
CopyFile(Application.ExeName, TUTAJ PODAJ MU SCIEZKE GDZIE CHCESZ GO SKOPIOWAC, true);

W tej drugiej sciezce nie zapomnij dopisac na koncu nazwy pliku wraz z rozszerzeniem *.exe. Tyle na ten temat.

0

Nie myślałem że to takie proste :) Przenoszenie tak ale w temacie wyraźnie napisane że kopiowanie i wklejanie :) Teraz jeszcze jedno takie pytanie - jak zrobić żeby program uruchamiał się jako administrator ?? Był taki temat na forum ale jak robiłem według instrukcji to podczas kompilacji wyskakiwał błąd - coś z 16 bitami jakos tak. Ta instrukcja polegała na dodawaniu XPManifest i zmanie pliku windowsxp.rec

0

A co, robala dla siostry piszesz?:p A tak na serio to podaj link do tego artykułu, rzuce okiem.

0

Pod Windowsy Vista i 7 o ile się orientuje trzeba dodać specjalny manifest
do zasobów, a program będzie się pytal użytkownika z włączonym UAC, o
to czy ma się uruchomić na odpowiednich prawach. Ja taki plik manifestu,
stworzyłem z pomocą programiku Vista Manifest Builder - dostępnego na:
forum elektroda.pl, o ile dobrze pamiętam. A co do usuwania pliku to tak
z pośpiechu przeglądająć forum napisałem. Jak chcesz tylko kopiowac, to
tak jak Tobie napisaliśmy. Jednak dla systemów z UAC - imo, powinieneś
pliki zapisywać do %appdata% albo %temp% tam masz możliwy zapis i
to bez kombinowania. A jeżeli chcesz do innych folderów - to manifest ;/

0

Jeszcze raz do tego kopiowania - jak zrobię tak:
CopyFile(Application.ExeName, 'C:\Project1.exe', true);
To mi błąd wyskakuje :/

0

To napisz co to za blad, lol :p

0

[Error] Unit1.pas(88): Incompatible types: 'String' and 'PAnsiChar'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

0

Co do pierwszego to chyba masz problem przy konwersji w sciezkach (o ile to ta linia). Uzyj takiej komendy:
PChar(SCIEZKA), np:

CopyFile(PChar(Application.ExeName), PChar('C:\Project1.exe'), true);

tam gdzie masz wpisana sciezke w instrukcji. Jak dalej jest blad, to podaj tez linie kodu, w ktorej jestten blad zeby bylo wiadomo o co chodzi ;)

0

CopyFile(Application.ExeName, 'C:\Project1.exe', true);
Na tej linii mi ten błąd wywala :) Jak ją wywalę to wszystko ok :)

0

Zrob tak jak napisałem wcześniej. Jak nie będzie działać, to podeślij kod całego Unita.

0

@Klocek94: widzisz, teraz Ty niedokładnie czytałeś mój post.
Czy ja pisałem gdziekolwiek, że jako dwa pierwsze parametry
podajesz typy string? Napisalem, że są wymagane PChar'y ;/

0

Ok działa :) Ale teraz jeszcze takie coś
IdMessage1.Subject := Windows.GetUserName;

Taki błąd mi wywala:
[Error] Unit1.pas(70): Not enough actual parameters

0

No i z czy masz problem? Przecież wyraźnie komunikat pisze co jest nie tak. Przeczytaj:
http://msdn.microsoft.com/en-us/library/ms724432(VS.85).aspx
A w ogóle tak ciężko wpisać w google delphi GetUserName i zobaczyć atrykuł, ktory jest
jako pierwy wynik: http://www.chami.com/tips/delphi/011197d.html - ogarnij się [!!!] [!!!] [!!!]

0

Yyy nie wiem jak Ty, ale ja gdy postawię kropke po 'Windows.' to nie widze odnośnika do takiej metody jak GetUserName. Skąd to wziales i co to 'robi'?:)

0

A no tak to inna bajka, Olesio :p

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