mboost-dp1

C#: Indlæsning af txt-fil når programmet starter


Gå til bund
Gravatar #1 - Tang
14. aug. 2007 12:07
Jeg sidder og roder med et notepad-lignende program i C#.
Nu er jeg så stødt ind i det problem at programmet også skal kunne indlæse en txt-fil hvis man har valgt at åbne en bestemt fil med dette program. Altså programmet skal kunne indlæse en fil som det får stien til når det starter.
Det er lidt tricky at forklare mit problem men jeg håber alligevel at nogen kan hjælpe mig.
Gravatar #2 - myplacedk
14. aug. 2007 12:13
Nu er jeg så stødt ind i det problem at programmet også skal kunne indlæse en txt-fil hvis man har valgt at åbne en bestemt fil med dette program.

Altså noget i stil med
c:\> notepad.exe autoexec.bat

Så skal den åbne c:\autoexec.bat ?
Hvad er problemet, kan du ikke finde ud af hvad der står efter programmets navn?
Gravatar #3 - Tang
14. aug. 2007 12:24
#2
Tak for svaret. Jeg har dog ikke rigtig lige forstået det du skrev.
Jeg har kun kodet i C# i et års tid. Så jeg kunne godt lige bruge en lidt bedre forklaring.
Gravatar #4 - myplacedk
14. aug. 2007 12:27
Lad os sige at jeg har gættet dit første problem rigtigt.

static void Main(string[] args) {
String filnavn = args[0];


Sådan, nu har du det første "argument", dvs. filnavn indeholder "autoexec.bat" i mit eksempel. Så er det bare at åbne filen, ca. ligesom hvis man havde valgt den i en dialogboks.
Gravatar #5 - Tang
14. aug. 2007 12:36
#4
Endnu engang tak for svaret, det var til at forstå!

Men sagen er den at det er en Windows applikation (Med GUI), som jeg skal bruge koden til. Det som du skriver i #4, det er kode til en Konsol-applikation.
Men ellers tak.
Gravatar #6 - myplacedk
14. aug. 2007 12:53
#5
Nej, det er præcist samme måde man overfører parametre. Hvis du i Explorer vælger at åbne autoexec.bat med notepad, så sker der det samme som jeg viste, jeg tror faktisk slet ikke du kan se forskellen inde i programmet hvis du vil.

Det er derfor simpel associering ser ud som det gør. Fx. txt-filer ser sådan ud:

Handling: open
Program der udfører handlingen: C:\WINDOWS\system32\NOTEPAD.EXE %1

Når jeg så dobbelt-klikker på d:\test.txt bliver det sat ind i stedet for %1, og så bliver det til:
C:\WINDOWS\system32\NOTEPAD.EXE D:\test.txt

Det kører Windows så, med samme resultat som hvis du havde skrevet det i DOS.
Gravatar #7 - Tang
14. aug. 2007 12:55
Never mind jeg har løst problemet ved hjælp af tippet i #4

Program.cs

static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(args));
}


Form1.cs

public Form1(string[] args)
{
InitializeComponent();

if (args.Length != 0)
TbText.LoadFile(args[0]);
}
Gravatar #8 - myplacedk
14. aug. 2007 13:00
Den løsning kan jeg ikke så godt lide. Form1 skal ikke bekymre sig om hvordan programmet er blevet åbnet. Prøv fx. noget i stil med:

I Main:

String path = null;
if (args.Length>0) {
path = args[0];
}
Application.Run(new Form1(path));

Og i Form1:

public Form1(string path)
{
InitializeComponent();
if (path != 0)
TbText.LoadFile(path);
}


(Med forbehold for at jeg ikke kan C#, dette er ca. Java-syntax.)

Eller endnu bedre, lav to udgaver af constructoren, én med parameter, og én uden. Men det behøver jo ikke at være perfekt. :)
Gravatar #9 - Cyrack
14. aug. 2007 13:21
Argh!

Sqda ikke businesslogic i GUI!
Prøv at se hvad MVC kan gøre.
</rant>
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login