[c#] File in solution, hoe ernaar referen?

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Ik heb een simpel console progje gemaakt in VS2003 en in de solution heb ik gewoon een bestandje toegevoegd, een XML bestandje in mijn geval.

Nou hoopte ik dat ik em gewoon kan opvragen met Document.Load("settings.xml") maar dan gaat ie dus in de "huidige dir" kijken, welke dat ook is. Ik heb ook al deze twee geprobeerd:
C#:
1
2
Environment.GetCommandLineArgs()[0]
System.Reflection.Assembly.GetEntryAssembly().Location
maar die twee geven de locatie van de executeable terug (in projectmapje/bin/debug), en daar staat die settings.xml niet...

Hoe kan ik in m'n applicatie nou op een nette manier aan die settings.xml komen? Ohja, en als ik em klaar heb, dan moeten settings.xml en executable gewoon in hetzelfde mapje komen natuurlijk. Maar tijdens ontwikkelen is dat onhandig.

日本!🎌


  • lier
  • Registratie: Januari 2004
  • Laatst online: 23:40

lier

MikroTik nerd

Een aantal opties:

1) Zet een vaste padverwijzing in de code voor bouwdoeleinden
2) Copieer de xml file naar je debug/release map
3) Gebruik een app.config file

Eerst het probleem, dan de oplossing


Verwijderd

Ik vraag me wel af waarom je een aparte settings file maakt terwijl er in .Net zo veel opties zijn om configuratiegegevens in te stoppen, zoals bijv. app.config, web.config, etc.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Tijdens het bouwen is het imo het makkelijkst om gewoon even twee directories omhoog te gaan.
Zie System.IO.Path.Combine

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 01-05 19:09

pjvandesande

GC.Collect(head);

Waarom maak je niet gewoon gebruik van Build Event.

code:
1
copy $(ProjectDir)MijnBestand.xml $(ProjectDir)$(OutDir)MijnBestand.xml


Meer info over Build Events vind je hier.

Dan kun je in je code gewoon hetvolgende doen:
C#:
1
Document.Load( Application.StartupPath + @"\settings.xml");
Verwijderd schreef op woensdag 24 augustus 2005 @ 16:14:
Ik vraag me wel af waarom je een aparte settings file maakt terwijl er in .Net zo veel opties zijn om configuratiegegevens in te stoppen, zoals bijv. app.config, web.config, etc.
app.config / web.config zijn read-only en zijn ook zo bedoelt. Je kunt er natuurlijk zelf wel iets voor schrijven om dit te veranderen, maar je kunt niet standaart naar je .config bestand schrijven.

[ Voor 41% gewijzigd door pjvandesande op 24-08-2005 16:48 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Aha, een build-event lijkt me wel een mooie oplossing, dat ga ik es proberen :)

日本!🎌


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:39
Als het om user-specific settings gaat, kan je die beter in de Application Data folder van de current user bewaren.

Het path naar die folder kan je mbhv deze code ophalen:
code:
1
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

https://fgheysels.github.io/


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 01-05 19:09

pjvandesande

GC.Collect(head);

Je kunt ook nog werken met conditional directive's, voorbeeldje:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
        public void Melp()
        {
#if(DEBUG)
            // Deze zal gebruikt worden in Debug mode.
            string filename = @"c:\myfile.ext";
#else
            // Deze zal gebruikt worden buiten Debug mode.
            string filename = @"c:\myfolder\myfile.ext";
#endif

            Document.Load( filename );
        }

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Nee het is echt een bestandje dat bij de exe hoort te staan. En conditional directives vind ik eigenlijk niet zo netjes hiervoor. Als een collega dit project via sourcesafe naar zijn pc zou hallen, zouden die directives weleen niet kunnen werken.

Maar niet gevreesd, een build-event was de oplossing, wel enigzins gemodificeerd:
code:
1
copy "$(ProjectDir)settings.xml" "$(TargetDir)"
Maar bedankt voor de input :)

Ohja, questa, Application.StartupPath gaat niet, het is geen winforms-app ;)
Dus maar zo gedaan:
C#:
1
Document.Load(Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + @"\settings.xml");

[ Voor 27% gewijzigd door _Thanatos_ op 25-08-2005 11:18 ]

日本!🎌

Pagina: 1