Søke etter favourites

Bruker TSearchRec å sløyfe gjennom Explorer-favoritter, som virkelig er inifiles. Resultatet beeing plasseres i HTML og tekst files.NOTE: Denne artikkelen er et par år gammel. Og mens koden fortsatt fungerer fint som et eksempel på bruk inifiles og rekursive søk - Internet Explorer har hatt eksportmuligheter innebygd i programmet ** Samle Explorer FavouritesJohan LindgrenRecently en person på jobb forlot for et annet selskap.. Beeing en journalist, hun var veldig interessert i å bringe den lange listen over favoritt internett linker som hun hadde samlet inn i løpet av sin tid med oss. Dette er virkelig en valueble journalistisk verktøy i disse dager. Vel, hvis hun skulle til et selskap også utstyrt med Windows og Explorer kan du bare kopiere mappen holder favorittene. Men siden hun skulle til en MAC-basert selskap som bruker Netscape var det en annen situasjon. Det kan være en måte i Explorer for å gjøre dette. Og det kan være programmer der ute gjør dette. Men jeg fant ingen, så jeg gjorde et program for å gjøre det. Hva programmet gjør er rett og slett rekursivt søke i mappen med Explorer-favoritter og legge det hele til en tekstfil og HTML-fil. Den store fordelen med å lagre resultatet i HTML-format er at du kan gjøre linkene aktive og dermed filen nyttig i enhver browser.First av alt er det en ini-fil med innstillinger for SearchPath til favoritter og SearchPath og navnene på filene der resultatet skal lagres. Filen heter "favoriter.ini", og er plassert i samme mappe som exe-filen. (Noen ord du møter er på svensk!) The inifile:[Favoriter]WindowsFavoriter=c:\\windows\\favoriter\\HTMLsave=c:\\favoriter.htmlTEXTsave=c:\\favoriter.txtIt er viktig å få søke banen rett etter programmet å work.The program består av en RichEdit å holde teksten resultat, til en knapp starte, en knapp for å lukke og en statuslinje. (Som ikke er nødvendig i det hele tatt.) Operasjonen er ganske rett frem. Når du klikker på start-knappen koden er knyttet til at knappen er utført. Søket starter, og hvis det oppstår en undermappe en egen prosedyre kalles. Denne prosedyren er tilbakekalt for hver undermappe oppstått. Så vil programmet søke ut hver subfolder.This er søke kvartal fra klikkhendelsen. Rutinen i prosedyren er meget lik. (Se fullstendig program oppføring.) Test: = FindFirst (sokmapp +, faAnyFile, SearchRec '* *.'); //Se om vi får noe resultat fra vår første søket hvis test = 0 da //hvis vi fikk et resultat. Angitt med en 0 i FindFirst funksjon !! mens test = 0 ikke begynne //Så lenge vi får 0-tallet fra våre Rans det er flere filer eller mapper til prosessen tilfelle searchrec.Attr av //Sjekk for å se hva som tilskriver Søkeresultat hadde 16: begynne //Hvis det var en 16 det er en undermappe hvis (searchrec.name < > '.') og (searchrec.name < > '..') så //Sjekk for å se at det er ikke en. eller en .. som er symboler for mappen over og den samme mappen SokIEnMapp (avsender, sokmapp + '\\' + searchrec.name, searchrec.name); //Hvis det var en annen mappe, kan du ringe en subrutine for å undersøke den mappen slutt; 32: begynne //Hvis det var en 32-det er en fil hvis ansilowercase (extractfileext (searchrec.name)) = 'url' da begynne //hvis filnavnet slutter med .url det er en oppdagelses favoritt inifil: = tinifile .create (sokmapp + searchrec.name); //Opprett en inifile gjenstand for denne filen prøve temptext: = inifil.readstring ( 'InternetShortcut', 'URL', ''); //Les selve koblingen fra filen richedit1.Lines.Add (stringreplace (searchrec.name, extractfileext (searchrec.name), '') + '=' + temptext); //Vis filnavn og koblingen i RichEdit statusbar1.SimpleText: = searchrec.name; //Vis filnavnet på statuslinjen statusbar1.Update; //Oppdater statuslinjen application.processmessages; //Og gi vinduene en sjanse til å fange opp grunder.Add ( '< li > < a href="'+temptext+'">'+stringreplace(searchrec.name,extractfileext(searchrec.name),'')+'</a></li>'); //Legg favoritten til vår midlertidige stringlist endelig inifil.Free; //Frigjør inifile objektet slutten, slutten, slutten, slutten, test: = findnext (searchrec); //Ring findnext for å se om det er flere filer eller mapper slutt; findclose (searchrec); //Slipp søk objectThe resulterende HTML-fil inneholder navnet på linken og selve koblingen i en < a href = tag som gjør filen nyttig .... Johan Lindgren er en ex-journalist nå arbeider med teknisk utvikling for den svenske News Agency (Tidningarnas Telegrambyrå byrå~~POS=HEADCOMP). det innebærer arbeid med SGML, XML og XSL. Han bruker Delphi å produsere de ulike deler av programvaren som er nødvendig. Han kan nås på johan.lindgren@tt .seSourcecode: enhet favvo; interfaceuses Windows, Meldinger, SysUtils, Klasser, Grafikk, kontroller, skjemaer, dialogbokser, StdCtrls, ComCtrls, inifiles, ExtCtrls, skriver Tfavu = klasse (TForm) RichEdit1: TRichEdit; PANEL1: TPanel; startsearch: TButton; StatusBar1: TStatusBar; Button1: TButton; Prosedyren startsearchClick (Sender: TObject); Prosedyren Button1Click (Sender: TObject); Prosedyren FormCreate (Sender: TObject); Prosedyren SokIEnMapp (avsender: TObject; sokpath, katalog: string); Prosedyren FormDestroy (Sender: TObject); private {felleserklæringer} offentlige {offentlige erklæringer} SearchRec: TSearchRec; //Den generelle søkeobjekt sokmapp, htmlut, textut: string; //Strings for å holde mappen for å søke og filene for søkeresultat htmlspar: tstringlist; //String liste for å holde HTML-filen slutten; fungere KollaSlutet (rad, ludder: string): string; funksjon StringReplace (tekst, byt, mot: string): string; Var favu: Tfavu; gjennomføringen {$ R * .DFM} //======= Når programmet er lansert ======== //prosedyren Tfavu.FormCreate (Sender: TObject); Var inifil: TIniFile; //Inifile-objekt for å lese brukerinnstillinger exepath: string; //SearchPath for applicationbegin exepath: = extractfilepath (application.exename); //Pakk ut SearchPath for søknaden exepath: = kollaslutet (exepath, '\\'); //Ring en funksjon som sjekker at den første strengen slutter med den andre strengen inifil: = tinifile.create (exepath + 'favoriter.ini'); //Opprett inifile objektet med exepath kombinert med inifile navn. prøve sokmapp: = inifil.readstring ( 'Favoriter', 'WindowsFavoriter', 'c: \\ windows \\ favoritter \\'); //Få SearchPath for mappen som inneholder explorer favoritter sokmapp: = kollaslutet (sokmapp, '\\'); //Ring rutinen "kollaslutet" for å sørge for at strengen slutter med en \\ htmlut: = inifil.readstring ( 'Favoriter', 'HTMLsave', 'c: \\ favoriter.html'); //Få navnet og banen til filen der html resultatet skal lagres textut: = inifil.readstring ( 'Favoriter', 'TEXTsave', 'c: \\ favoriter.txt'); //Få navnet og banen til filen der teksten resultatet skal lagres endelig inifil.free; //Frigjør ressurser til inifile objektet slutten; htmlspar: = tstringlist.create; //Opprett stringlist å holde HTML resultend; //====== du klikker på knappen for å begynne å samle favorittene ======== //prosedyre Tfavu.startsearchClick (Avsender: TObject); Var inifil: TIniFile; //Inifile objekt for å få innholdet av favorittene temptext: string; //Midlertidig streng for lagring test: integer; //Integer for kontroll av søkeresultatene Grunder: TStringList; //String liste for å holde Søkeresultat fra en folderbegin screen.cursor: = crHourglass; //Vis glasset for å la brukeren vet at vi er opptatt Grunder: = TStringList.create; //Opprett stringlist htmlspar.add ( '< html > < head > < title > Internet Favoritter < /title > < /head > < body >'); //Sett opp de første HTML-elementer i det stringlist prøve test: = FindFirst (sokmapp +, faAnyFile, SearchRec '* *.'); //Se om vi får noe resultat fra vår første søket hvis test = 0 da //hvis vi fikk et resultat. Angitt med en 0 i FindFirst funksjon !! mens test = 0 ikke begynne //Så lenge vi får 0-tallet fra våre Rans det er flere filer eller mapper til prosessen tilfelle searchrec.Attr av //Sjekk for å se hva som attributt den Søkeresultat hadde faDirectory: begynne //Hvis det var en 16 det er en undermappe hvis (searchrec.name < > '.') og (searchrec.name < > '..') så //Sjekk for å se at det er ikke en. eller en .. som er symboler for mappen over og den samme mappen SokIEnMapp (avsender, sokmapp + '\\' + searchrec.name, searchrec.name); //Hvis det var en annen mappe, kan du ringe en subrutine for å undersøke den mappen slutt; 32: begynne //Hvis det var en 32-det er en fil hvis ansilowercase (extractfileext (searchrec.name)) = 'url' da begynne //hvis filnavnet slutter med .url det er en oppdagelses favoritt inifil: = tinifile .create (sokmapp + searchrec.name); //Opprett en inifile gjenstand for denne filen prøve temptext: = inifil.readstring ( 'InternetShortcut', 'URL', ''); //Les selve koblingen fra filen richedit1.Lines.Add (stringreplace (searchrec.name, extractfileext (searchrec.name), '') + '=' + temptext); //Vis filnavn og koblingen i RichEdit statusbar1.SimpleText: = searchrec.name; //Vis filnavnet på statuslinjen statusbar1.Update; //Oppdater statuslinjen application.processmessages; //Og gi vinduene en sjanse til å fange opp grunder.Add ( '< li > < a href="'+temptext+'">'+stringreplace(searchrec.name,extractfileext(searchrec.name),'')+'</a></li>'); //Legg favoritten til vår midlertidige stringlist endelig inifil.Free; //Frigjør inifile objektet slutten; //prøve å til slutt ende; //hvis .url slutten; //sak 32 slutten; //tilfelle test: = findnext (searchrec ); //Ring findnext for å se om det er flere filer eller mapper ende; //mens findclose (searchrec); //Slipp søkeobjektet htmlspar.Text: = htmlspar.text + '< b > Ulike linker < /b > < ul > '+ grunder.text +' < /ul > '; //Legg til HTML stringlist topplinja, og resultatene fra denne mappen htmlspar.add (' < /body > < /html > ' ); //slutt legge den avsluttende HTML-elementer htmlspar.SaveToFile (htmlut); //Lagre HTML stringlist til det angitte navn richedit1.lines.SaveToFile (textut); //Lagre linjene i RichEdit til den angitte filen Make. Sørg for å ha klartekst = true i RichEdit endelig grunder.free; //Frigjør stringlist screen.cursor: = crDefault; //Gjenopprett markøren slutten, slutten; //======= Prosedyre for å søke i en bestemt mappe ===== //prosedyre Tfavu.SokIEnMapp (avsender: TObject; sokpath, katalog: string); Var undermapp: tsearchrec; //Søkeresultat for denne spesifikke mappen inifil: tinifile; //Inifile å lese innhold fra URL-filer temptext: string; //Midlertidige streng test2: integer; //Integer å se hva søkeresultat vi gotbegin richedit1.lines.add (katalog); //Start med å legge inn navnet på mappen som det skal søkes til RichEdit statusbar1.SimpleText: = katalog; //Gjør det samme med statuslinjen statusbar1.Update; //Oppdater statuslinjen application.processmessages; //Sørg for at vinduene får en sjanse htmlspar.add ( '< b >' + katalog + '< /b > < ul >'); //Legg navnet på mappen til HTML streng liste test2: = findfirst (sokpath +, faAnyFile, Undermapp '\\ *.'); //Start et søk i undermappen hvis test2 = 0 da //Hvis vi får en 0 vi scoret en hit mens test2 = 0 ikke begynne //Så lenge vi fortsetter å finne nye mapper eller filer case undermapp.attr av //Sjekk egenskap av søkeresultat 16: begynne //Hvis det var en 16 det er en undermappe if ( '.' undermapp.name <; >) og (undermapp.name < > '..') deretter //så lenge navnet ikke er det. eller .. vi fortsette vårt søk SokIEnMapp (avsender, sokpath + '\\' + undermapp.name, undermapp.name); //Ring samme rutine å fortsette å søke undermapper slutten; //16 32: begynne //32 innebærer en fil hvis ansilowercase (extractfileext (undermapp.name)) = 'url' da begynne //Hvis filnavnet slutter med .url det er en oppdagelses favoritt inifil: = tinifile.create ( sokpath + '\\' + undermapp.name); //Opprett en inifile gjenstand for denne filen prøve temptext: = inifil.readstring ( 'InternetShortcut', 'URL', ''); //Les linken i filen richedit1.Lines.Add (stringreplace (undermapp.name, extractfileext (undermapp.name), '') + '=' + temptext); //Legg til RichEdit statusbar1.SimpleText: = undermapp.name; //Sjekk navnet på filen i statuslinjen statusbar1.Update; //Oppdater statuslinjen application.processmessages; //La vinduer gjør det er business htmlspar.Add ( '< li > < a href="'+temptext+'">'+stringreplace(undermapp.name,extractfileext(undermapp.name),'')+'</a></li>');//Add filnavn og koblingen til HTML stringlist endelig inifil.Free; //frigjøre inifile objektet slutten; //prøve slutten; //hvis slutten; //32 ende; test2: = findnext (undermapp); //kaller finne neste å fortsette å søke slutten; //mens htmlspar.add ( '< /ul >'); //Legg en avsluttende koden til html streng liste findclose (undermapp); //Ring finne nær for å lukke søke objectend; //======== Når du lukker programmet ========== //prosedyre Tfavu.Button1Click (Sender: TObject), begynner nær; //lukk applicationend; prosedyren Tfavu.FormDestroy (Sender: TObject), begynner htmlspar.free; //Free den resourse for html streng listend; //================ funksjoner ============ == ////========== Kontroller at en streng ender med en bestemt streng ============= //funksjon KollaSlutet (rad, ludder: string): streng, begynne hvis lengde (rad) > 0 da //Pass på at det fortsatt finnes noe der for å sjekke om rad [lengde (rad)] < > ludder deretter rad: = rad + ludder; //Hvis det slutter ikke med riktig ending - legg det resultere: = rad; //Returner stringend; //========== Funksjon for å endre den første forekomsten av byt mot mot i teksten =========== //funksjon StringReplace (tekst, byt, mot: string): string; Var plats: integer; begynne hvis pos (byt, tekst) > 0 da begynne //hvis byt finnes i tekst plats: = pos (byt, tekst); //Note hvor det er slette (tekst, plats, lengde (byt)); //Fjerne de samsvar byt innsats (MOT, tekst, plats); //Setter mot i riktig sted slutten; //Hvis byt eksistert i teksten resultat: = tekst; //I alle fall tilbake textend;. Slutten



Previous:
Next Page: