mboost-dp1
C#: Indlæsning af txt-fil når programmet starter
- Forside
- ⟨
- Forum
- ⟨
- Programmering
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.
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.
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?
Lad os sige at jeg har gættet dit første problem rigtigt.
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.
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.
#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:
Når jeg så dobbelt-klikker på d:\test.txt bliver det sat ind i stedet for %1, og så bliver det til:
Det kører Windows så, med samme resultat som hvis du havde skrevet det i DOS.
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.
Never mind jeg har løst problemet ved hjælp af tippet i #4
Program.cs
Form1.cs
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]);
}
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:
Og i Form1:
(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. :)
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. :)
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.