Miten saan nappulaa painamalla tehtyä pikku skriptin? Siis ajattelin, että jos onnistuisi esim sellainen, että kun painaa nappulaa (Button1) niin se tekisi tämän skriptin pätkän:
del c: *.tmp
del %temp%*.tmp /f
del %windir%prefetch*.*
del %windir%temp*.* /f
del C:documents and settings*local settingstemp*.* /f
Eli tyhjentäisi temp tiedostot. Vai onko mahdollista tuollainen? Lazarus on käytössä.
Kysymys.
7
356
Vastaukset
- Polunkulkija.
Eräs tapa on tehdä se vaikkapa prosessilla! (Käsittääkseni Delphi ei tue prosesseja mutta Lazarus ja FreePascal tukee sitä).
Eli laita lomakkeelle , edit, button ja memo:
Niin alla oleva rutiini ajaa komentorivillä niitä käskyjä mitä olet edittiin kirjoittanut. Memossa näät tekstit joita antamasi käsky kirjoittaisi ruudulle.
Lisää Uses-lauseeseen Process ja luo napin painamiselle tapahtuma
procedure TForm1.Button1Click(Sender: TObject);
var aProcess: TProcess;
begin
aProcess := TProcess.Create(nil);
aProcess.CommandLine := Edit1.Text;
aProcess.Options := AProcess.Options [poWaitOnExit, poUsePipes];
aProcess.Execute;
Memo1.Lines.LoadFromStream(aProcess.Output);
aProcess.Free;
end;
Voit muokata rutiinia esim. niin että kirjoitat haluamasi komennon
merkkijonona Edit1.Textin paikalle. Jos et halua memoa niin poista
Memo1.L... rivi ja aseta aProcess.Options rivi näin:
aProcess.Options := AProcess.Options [poWaitOnExit];- Mika0800
"Käsittääkseni Delphi ei tue prosesseja"
Delphissä ei ole erikseen prosessitukea, mutta Delphi -ohjelmasta voi tehdä windows API -kutsuja.
Näistä prosessien luontiin liittyvät vanhempi WinExec ja uudempi CreateProcess. lisätietoja msdn:stä.
Delphi oma DeleteFile poistaa tiedoston, muttei tue wildcard -merkkejä (*, ?).
ongelman kiertämiseksi 2 keinoa:
1. käsittele wildcard -merkit itse, siis FindFirst, FindNex, FindClose -proseuurien avulla (Delphi help: FindFirst).
2. kierrä ongelma hyödyntämällä windows shelliä:
shFileOperation (lisätiedot: msdn).
tässä tapauksessa myös:
uses
ShellAPI;
kannattaa Delphin helpistä katsioa myös FileExists ja DirectoryExists.
- rraarraarraa
Funktio DeleteFile(tiedoston_nimi) poistaa yhden tiedoston. Paluuarvona tulee true jos poisto onnistui.
- Useampi tiedosto poistuu
Tämä poistaa tietystä kansiosta (jos kansio:='' niin se kansio missä tämä ohjelma on) annetun nimiset tiedostot. Tässä esim. ne joissa on .bak tiedostopääte.
procedure DeleteFiles(KansioJaTiedostonimi: string);
var SearchRec: TSearchRec;
begin
if FindFirst(KansioJaTiedostonimi, faAnyFile, SearchRec) = 0 then
try
repeat
DeleteFile(SearchRec.Name);
until FindNext(SearchRec) 0;
finally
FindCLose(SearchRec);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var kansio,tiedostonimi:string;
begin
kansio :='';
tiedostonimi:= '*.bak' ;
DeleteFiles(kansio tiedostonimi);
end; - Hmmm..?
Mitä tuo nyt siis tekee? Poistaako se temp tiedostot vai mitä?
- 88888888
Hmmm..? kirjoitti:
Mitä tuo nyt siis tekee? Poistaako se temp tiedostot vai mitä?
TProcess-luökalla käynnistetään uusia prosessaja eli
sillä pystynee ajamaan toisia ohjelmia omasta ohjelmasta käsin. - Mika0800
Hmmm..? kirjoitti:
Mitä tuo nyt siis tekee? Poistaako se temp tiedostot vai mitä?
Annettu esimerkki ei sellaisenaan voi toimia oikein!
SearchRec.Filename palauttaa löydetyn tiedostonimen ILMAN polkunimeä.
Järkevämpää olisi välittää proseduurille 2 eri parametrina kansionimi ja tiedostomaski.
Tarvittaessa:
ExtractFilePath
ja ExtractFileDir
ovat hyödyllisiä.
ExtractFilePath: hakemiston loppu - "\" sisältyy paluuarvoon, sensijaan ExtractFileDir:ssä ei sisälly.
Kun esimerkkikoodista korjaa tuon epäkohdan, sen pitäisi toimia.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Tänään pyörit ajatuksissa enemmän, kun erehdyin lukemaan palstaa
En saisi, silti toivon että sinä vielä palaat ja otetaan oikeasti selvää, hioituuko särmät ja sulaudummeko yhteen. Vuod225364- 264557
- 282641
- 342304
- 372058
- 151988
En ole koskaan kokenut
Ennen mitään tällaista rakastumista. Tiedän että kaipaan sinua varmaan loppu elämän. Toivottavasti ei tarvitsisi vain ka191627- 121571
Voi ei! Jari Sillanpää heitti keikan Helsingissä - Hämmästyttävä hetki lavalla...
Ex-tangokuningas on parhaillaan konserttikiertueella. Hän esiintyi Savoy teatterissa äitienpäivänä. Sillanpää jakoi kons211327- 151226