c# openfiledialog

Plaats reactie
Gebruikersavatar
Loeri
Premium Member
Premium Member
Berichten: 490
Lid geworden op: 04 sep 2011, 14:32
Uitgedeelde bedankjes: 73 keer
Bedankt: 26 keer

Wanneer ik Load klik in mijn menu roep deze een OpenFileDialog op.
Nu wordt deze juist getoond en kan ik een file laden met de volgende code:

Code: Selecteer alles

public int[] LoadFileDataAccess(int[] getallen)
        {
            int[] loadLines;
            loadLines = new int[getallen.Length];
            // Create an instance of the open file dialog box.
            OpenFileDialog openDialog = new OpenFileDialog();

            // Set filter options and filter index.
            openDialog.Filter = "Dat Files (.dat)|*.dat";
            openDialog.FilterIndex = 1;
            openDialog.ShowDialog();


            FileStream openFile = (FileStream)openDialog.OpenFile();
            StreamReader sr = new StreamReader(openFile);

                int x = 0;
                while (!sr.EndOfStream)
                {
                    loadLines[x] = Convert.ToInt32(sr.ReadLine());
                    x += 1;
                }
            
            openFile.Close();
            return loadLines;
        }
Maar waneer ik de OpenFiledialog krijg en direct op Annuleren/Cancel druk krijg ik de exception: {"Index was outside the bounds of the array."} System.Exception {System.IndexOutOfRangeException} bij:

Code: Selecteer alles

FileStream openFile = (FileStream)openDialog.OpenFile();
Iemand een idee hoe ik dit kan fixen?
tb0ne
Elite Poster
Elite Poster
Berichten: 1017
Lid geworden op: 24 aug 2012, 11:49
Uitgedeelde bedankjes: 28 keer
Bedankt: 84 keer

Als ik mij niet vergis helpt het je resultaat in een if else block te steken...

if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
//Do stuff
}
else
{
//Cancelled
}
gm123
Elite Poster
Elite Poster
Berichten: 1106
Lid geworden op: 08 mar 2009, 22:27
Uitgedeelde bedankjes: 67 keer
Bedankt: 119 keer

De luiemans oplossing is het in een try block steken en die exception catchen. :D
cptKangaroo
Elite Poster
Elite Poster
Berichten: 2759
Lid geworden op: 18 dec 2004, 14:33
Locatie: 053 Aalst
Uitgedeelde bedankjes: 551 keer
Bedankt: 194 keer

Na deze lijn moet je ook eerst kijken of openFile wel een object bevat vooraleer er een StreamReader op los te laten:
FileStream openFile = (FileStream)openDialog.OpenFile();
Gebruikersavatar
Loeri
Premium Member
Premium Member
Berichten: 490
Lid geworden op: 04 sep 2011, 14:32
Uitgedeelde bedankjes: 73 keer
Bedankt: 26 keer

Bedankt iedereen! Ik denk dat kangaroo de meest logische oplossing eheft gegeven. :-D

Dus ik denk dat het zo is?
Werkt allesinds, thx!

Code: Selecteer alles

if (openDialog.FileName != "")
                {
                FileStream openFile = (FileStream)openDialog.OpenFile();
                StreamReader sr = new StreamReader(openFile);
                int x = 0;
                while (!sr.EndOfStream)
                {
                    loadLines[x] = Convert.ToInt32(sr.ReadLine());
                    x += 1;
                }

                openFile.Close();
                }
            else
                {
                //Cancelled
                }
cptKangaroo
Elite Poster
Elite Poster
Berichten: 2759
Lid geworden op: 18 dec 2004, 14:33
Locatie: 053 Aalst
Uitgedeelde bedankjes: 551 keer
Bedankt: 194 keer

Test eens met een foute filename in te geven :P

Persoonlijk zou ik die OpenFileDialog enkel gebruiken om er een path(s) mee te selecteren, en een CheckFileExists. Het openen van de file kan je dan rechtstreeks met de filestream doen want die dialog is immers van Windows zelf en dus in principe iets minder "managed".
driesve
Elite Poster
Elite Poster
Berichten: 1613
Lid geworden op: 05 mei 2008, 12:32
Locatie: Antwerpen
Uitgedeelde bedankjes: 74 keer
Bedankt: 85 keer

gm123 schreef:De luiemans oplossing is het in een try block steken en die exception catchen. :D
Ik hoop dat je zelf weet dat ik absoluut geen goede manier van programmeren is. Het opvangen (en doorgooien) van excepties is zeer traag en nefast voor de "flow" van je programma.
tb0ne schreef:if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
Dit lijkt mij inderdaad de manier om te kijken of de gebruiker heeft geannuleerd of niet.
Loeri schreef:if (openDialog.FileName != "")
Ik zou de bovenstaande manier gebruiken en vervolgens de filename controleren met

Code: Selecteer alles

if (String.IsNullOrWhitespace(openDialog.FileName)) {
if (File.Exists(openDialog.FileName)) {
...
}}
gm123
Elite Poster
Elite Poster
Berichten: 1106
Lid geworden op: 08 mar 2009, 22:27
Uitgedeelde bedankjes: 67 keer
Bedankt: 119 keer

driesve schreef:
gm123 schreef:De luiemans oplossing is het in een try block steken en die exception catchen. :D
Ik hoop dat je zelf weet dat ik absoluut geen goede manier van programmeren is. Het opvangen (en doorgooien) van excepties is zeer traag en nefast voor de "flow" van je programma.
Nee, echt?

Voor hobbyprojectjes maakt dit trouwens niets uit.
Gebruikersavatar
Loeri
Premium Member
Premium Member
Berichten: 490
Lid geworden op: 04 sep 2011, 14:32
Uitgedeelde bedankjes: 73 keer
Bedankt: 26 keer

Was voor schoolproject :D
Maar nu kan ik niets meer veranderen, heb al verdedeging gedaan. :-)
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 446 keer
Bedankt: 1985 keer

driesve schreef:Ik hoop dat je zelf weet dat ik absoluut geen goede manier van programmeren is. Het opvangen (en doorgooien) van excepties is zeer traag en nefast voor de "flow" van je programma.
Oei... dan zijn zowat alle moderne talen slecht ontworpen :eek: (al vraagt een exceptie genereren inderdaad wat meer CPU)

Probeer in Java of C# maar eens een deftig stukje code te schrijven zonder... je weet toch dat de compiler je daartoe zelfs verplicht !
Plaats reactie

Terug naar “Development”