Pagina 1 van 1

c# openfiledialog

Geplaatst: 19 mei 2014, 16:26
door Loeri
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?

Re: c# openfiledialog

Geplaatst: 19 mei 2014, 16:43
door tb0ne
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
}

Re: c# openfiledialog

Geplaatst: 19 mei 2014, 18:12
door gm123
De luiemans oplossing is het in een try block steken en die exception catchen. :D

Re: c# openfiledialog

Geplaatst: 19 mei 2014, 21:19
door cptKangaroo
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();

Re: c# openfiledialog

Geplaatst: 20 mei 2014, 14:30
door Loeri
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
                }

Re: c# openfiledialog

Geplaatst: 20 mei 2014, 16:28
door cptKangaroo
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".

Re: c# openfiledialog

Geplaatst: 24 mei 2014, 15:41
door driesve
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)) {
...
}}

Re: c# openfiledialog

Geplaatst: 24 mei 2014, 16:42
door gm123
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.

Re: c# openfiledialog

Geplaatst: 25 mei 2014, 09:44
door Loeri
Was voor schoolproject :D
Maar nu kan ik niets meer veranderen, heb al verdedeging gedaan. :-)

Re: c# openfiledialog

Geplaatst: 25 mei 2014, 12:14
door ubremoved_539
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 !