Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[c#] OpenFileDialog verandert default path

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende testcase gemaakt. Je kan het uitvoeren door de code in je form constructor te plaatsen en een Local Database aan je project toe te voegen genaamd Data.sdf.

using System.Data.SqlServerCe;
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            SqlCeConnection con = new SqlCeConnection("Datasource=Data.sdf");

            Console.WriteLine(Application.ExecutablePath);
            Console.WriteLine(Application.LocalUserAppDataPath);
            Console.WriteLine(Application.CommonAppDataPath);
            //Console.WriteLine(Application.CommonAppDataRegistry);
            Console.WriteLine(Application.StartupPath);
            Console.WriteLine(Application.UserAppDataPath);
            Console.WriteLine(Application.UserAppDataRegistry);
            Console.WriteLine("---Separator---");

            OpenFileDialog dialog = new OpenFileDialog();
            dialog.ShowDialog();

            Console.WriteLine(Application.ExecutablePath);
            Console.WriteLine(Application.LocalUserAppDataPath);
            Console.WriteLine(Application.CommonAppDataPath);
            //Console.WriteLine(Application.CommonAppDataRegistry);
            Console.WriteLine(Application.StartupPath);
            Console.WriteLine(Application.UserAppDataPath);
            Console.WriteLine(Application.UserAppDataRegistry);
            
            con.Open();


De datasource is gespecificeerd zonder fullpath, dit betekent dat naar de database wordt gezocht in dezelfde directory als de executable. Indien bij het selecteren van een bestand door middel van de filedialog een bestand in dezelfde directory als de executable wordt opgegeven is er geen probleem. Indien ik bijvoorbeeld een file selecteer op de Desktop, gooit de open method een exception. Het probleem komt echter bij mij alleen voor op XP, niet op Vista. Ik heb al verschillende paths naar de console geschreven om te zien waar het probleem zit, maar zonder succes.

The database file cannot be found. Check the path to the database. [ Data Source = Data.sdf ]

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Vraag na die ShowDialog opnieuw u connectiestring eens op, en print die.

En hebt ge dit probleem ook bij een gewone SqlConnection?

[ Voor 29% gewijzigd door Snake op 09-02-2008 16:26 ]

Going for adventure, lots of sun and a convertible! | GMT-8


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Het is de Environment.CurrentDirectory die inderdaad daardoor wijzigt. Het voordeel ervan is dat als de user nog een keer een dialog voor z'n kiezen krijgt hij weer dezelfde dir voor te zien krijgt waar hij de vorige keer ook een file geselecteerd heeft.
Je zal dus zelf iest met Path.Combine moeten doen om een fullpath te generen om iets uit de root van je application directory te laden (bijvoorbeeld de Application.StartupPath), of het property RestoreDirectory op true zetten.

(heb het niet gecontroleerd, geen Visual Studio hier geïnstalleerd).

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Verwijderd

Zo'n soort probleem ben ik ook tegen gekomen, maar dan met een gewone FileStream (lezen/schrijven) en een OpenFileDialog (beide in 1 applicatie dus).

En inderdaad, precies wat je zegt: Vista doet het goed, bij XP gaat het fout.

Wat gebeurt er bij mij (en bij jou ook denk ik?):
Bij het openen van een relatieve pad gaat het programma inderdaad zoeken in de map van waaruit de EXE is opgestart (wat je ook wilt).
Maar zodra jij via een OpenFileDialog naar een andere map gaat, wordt die map onthouden als "home" map (en vanuit die map worden ook alle relatieve paden opgebouwd).

Dit probleem heb ik zelf verholpen door in mijn programma de huidige map (van de EXE; Environment.CurrentDirectory) op te laten slaan, en deze variabele te gebruiken wanneer ik een bestand "relatief" wil openen.

Of dit de juiste methode is weet ik ook niet, maar het werkt wel :P.

Edit: zie door de reactie hierboven dat deze locatie automagisch al wordt opgeslagen dus... Application.StartupPath ;)

[ Voor 6% gewijzigd door Verwijderd op 09-02-2008 16:31 ]


Verwijderd

Topicstarter
De connectionstring verandert niet, die blijft gewoon Datasource=Data.sdf (dat geeft de exception ook aan - zie boven). Het is het niet zichtbare gedeelte, de application path waar het programma naar de database zoekt dat waarschijnlijk verandert. Daardoor wordt bij het open method de database niet gevonden.

Sql Server heb ik nu niet geinstalleerd staan, maar ik zal het proberen.

Misschien kan iemand het uitproberen op XP en Vista en aangeven of ze tegen hetzelfde probleem aanlopen.

Verwijderd

Topicstarter
Ok, ik denk dat dat het wel oplost. Ik vond het niet specificeren van een fullpath wel een nette oplossing, maar ik zal dus toch het path moeten opbouwen door middel van Application.StartupPath.

Bedankt allemaal.

[ Voor 22% gewijzigd door Verwijderd op 09-02-2008 16:40 ]

Pagina: 1