01. marts 2004 - 15:14Der er
22 kommentarer og 1 løsning
Dynamisk Installation sti
Hejsa...
Jeg tænkte på, hvordan laver jeg det sådan i min installation af min win-form...at det vil virke ligegyldigt hvor brugeren vælger at installere programmet...problemet er : Hvis jeg fx. har skrevet data til disken inde fra mit program...jeg så ligger stien jo fast(kodet) ind i programmet og det gør stien ligeledes når jeg skal indlæse dataen igen...og derfor bliver dvs. filer jo nødtil at ligge de helt sammen steder for at det kan virke...
Ja, jeg ved at man kan specificere under setupen hvor div. enkelte filer skal installeres...men det er jo stadig styret af den erklærede sti inde i koden...dvs. det er ikke 100 % dynamisk...er der en metode eller lign. man kan benytte ind i koden, således at den fx. altid installerer de ønskede filer i windows biblioteket - uafhængig hvor brugeren har installeret sit O/S...?
Alle steder i programmet hvor du har behov for at angive en sti... der bruger du bare
DirectoryInfo dir = new DirectoryInfo( Directory.GetCurrentDirectory() );
som roden. Ovenstående dir er det direktory som programmet bliver afviklet fra, og hvis du altid tager udgangspunkt i denne, så er det ligemeget hvor slutbrugeren har programmet installeret.
okey smart...DVS. når jeg sidder og udvikler mit program...så sætter jeg den i første omgang til at skrive til en bestemt mappe, som jeg også kan læse fra....og når jeg så har lavet mit prog. 100 %...så ændrer jeg både skrive og læse stien til DirectoryInfo dir'et ?-)
Vil du ikke være flink lige at skrive et eksempel hvordan du benytter dir helt præcis ?
Jeg bruger det f.eks. i en FTP server jeg har lavet. Jeg har gemt alle bruger profiler i en mappe som "Users". For at jeg altid kan finde denne mappe uden at vide om programmet ligger på c: eller d: og i en mappe som hedder programmer eller ikke. Så har jeg bare skrevet at mappe ligger som en under mappe til
DirectoryInfo dir = new DirectoryInfo( Directory.GetCurrentDirectory() );
Så hvis jeg skal have fat i en brugerprofil, så ved jeg at den XML-fil som indeholder dem ligger på følgende sti
dir.FullName + "\\Users\\User.xml"
Og på den måde behøver jeg ikke tænke på hvor brugeren har installeret sit program henne på pc'en....
super! meen ...jeg savner stadig lige svar på mit spg. fra før...en ting er jo når man har lavet sit program færdig...men under selve udviklingen/når jeg selve kører programmet...så er jeg jo stadig nød til at skrive en permanent sti som jeg skrive/læser til/fra....og SÅ når jeg er færdig...så benytter jeg din smart metode ik...? eller kan jeg benytte den helt fra starten af...??
Øhhmmm....det kan godt være det er mig som er langsom...men hvordan vil du bruge DirectoryInfo dir = new DirectoryInfo( Directory.GetCurrentDirectory() ); i mens du udvikler? altså når man ligger og kompilerer osv...på det tidspunkt har man jo ikke noget (installations)"dir" at ref. til...?
Det er mig som stener...når man bruger det under selve udviklingen, så benytter den vel blot den mappe ens projekt-filer ligger i!...do!
nu hvor jeg har din opmærksomhed...så skulle du vel ikke vide noget om indsættelse af OLE objekter i forbindelse med en crystal report - vel?-) du kan tjene MANGE points hvis du gør!!
når man udvikler, så er currentdir stadig derfra hvor programmet afvikles = der hvor din exe fil er.... men hele ideen er jo også at man som sådan ikke referer til et dir, men til der hvor programmet afvikles fra. F.eks. når man udvikler i Visual Studio, så vil den smide dine filer i projektmappe\bin\debug\..
og dir vil i dette tilfælde være den samme sti indtil mappen debug, da det er der din exe fil er gemt...
Derfor kan man udvikle sit program og teste det, og de fil man referer til vil under udvikling blive gemt under eks. projektmappe\bin\debug\, mens når du flytter programmet vil blive gemt hvorend programmet ender med at ligge..
okey....men tak for hjælpen da! Jeg kan godt finde ud af at indsætte en OLE objekt...men jeg kan ikke indsætte fx. et word doc. på fx. 50s. som både indeholde tekst og billeder...og at den så automatisk opdeler doc'et ligesom jeg kan få den til hvis jeg indsætter et rent tekst doc....:( Hvis du kan finde svarer til mig så venter der 200 point ;)
Hmm, jeg er ikke helt enig i brugen af CurrentDir. Når programmet skal installeres vil der typisk blive oprettet nogle genveje i startmenuen og evt. på skrivebordet. Da vil GetCurrentDir blive sat til den sti der er angivet under "Start in"-feltet i egenskaberne for genvejen - hvilket betyder at du kan komme til at lede i den forkerte mappe. Alternativt kan du bruge enten Application.ExecutablePath (Virker kun i WinForms) eller this.GetType().Assembly.CodeBase
De giver begge stien til exe-filen, så du skal lige trække stien ud af strengen.
ØØhmm....jeg tænkte lige på...hvad nu når jeg har oprettet en "database" forbindelse til en XML-fil fra V.S. under "Design-mode"...dvs. de grafer jeg har oprettet og indsat i min crystal report...de ref. jo også til en bestemt fil...hvorledes ref. jeg rigtigt til denne fil...jeg kan ikke finde ref. i selve koden...:(
Det ville være rigtig rart - hvis jeg også blot kunne lægge den i projekt-biblioteket og så ref. til den på den smarte måde i har talt tidligere...
nej det har ikke noget decideret med CR at gøre...det er mere princippet i hvordan jeg laver en dynamisk ref. til min XML fil...således at det virker dynamisk under installation ligesom de resterende filer i setup'en. CR indhenter data fra filen herfra og præsenterer det...det kunne ligeså godt have været et datagrid eller lign. som referede til xml filen/datasettet datatabellen ligger i...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.