Laden...

Fehler bei Pfadformaten

Erstellt von PeterB vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.365 Views
P
PeterB Themenstarter:in
41 Beiträge seit 2009
vor 15 Jahren
Fehler bei Pfadformaten

Schönen guten morgen, 😁

ich versuche folgendes Problem schon zwei Tag zu lösen. 🙁

Ich erhalte immer den Fehler: ⚠

Das angegebene Pfadformat wird nicht unterstützt. ?(

Laut MSDN-Eintrag sollte dies alles so passen, wie es in meinem Quellcode ist.


                this.Folderpath = dlgFolderOpen.SelectedPath.ToString();

                try { this.fileEntries = Directory.GetFiles(this.Folderpath, "*.bmp", SearchOption.AllDirectories); }
                catch (Exception test) { MessageBox.Show("Exception: " + test.Message); }

Ich denke es liegt daran das ich den Pfad mit einfachen "" zurückbekomme der aber "\" enthalten sollte. ?(

Vielen Dank für eure Hilfe und Gruß

Peter

U
1.688 Beiträge seit 2007
vor 15 Jahren
  
                this.Folderpath = dlgFolderOpen.SelectedPath.ToString();  
  
                try { this.fileEntries = Directory.GetFiles(this.Folderpath, "*.bmp", SearchOption.AllDirectories); }  
                catch (Exception test) { MessageBox.Show("Exception: " + test.Message); }  
  

Ich denke es liegt daran das ich den Pfad mit einfachen "" zurückbekomme der aber "\" enthalten sollte. ?(

Was ist dlgFolderOpen?
Was ist dlgFolderOpen.SelectedPath? Es ist unwahrscheinlich, dass Du da ein .ToString() benötigst.
In welcher Zeile tritt der Fehler auf?
Was steht in Folderpath?

B
196 Beiträge seit 2007
vor 15 Jahren

Bist du dir sicher das dlgFolderOpen.SelectedPath auch eine korrekte Pfadangabe ist?

Wenn dein dlgFolderOpen ein FolderBrowserDialog ist solltest du schaun ob der vorher auch aufgerufen wurde und auch auf Ok geklickt wurde.

your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself

J
3.331 Beiträge seit 2006
vor 15 Jahren

Hallo,

zunächst einmal: **SelectedPath **ist schon ein String, das "ToString" ist also völlig überflüssig. Ebenso kann this hier (wie fast immer) weggelassen werden. Der doppelte **Backslash **wird nur innerhalb von C#-Strings benötigt, aber in allen externen Ausgaben (TextBox, MessageBox usw.) nicht. Dein Hinweis dazu sagt also überhaupt nichts aus.

Der einzige Verdacht, den ich habe, ist, dass der BrowserDialog auf ein "ungültiges" Verzeichnis hinweist, z.B. weil vorher nichts zugewiesen und mit Cancel abgebrochen wurde, der Wert aber trotzdem verwendet wird. Lies Dir einmal in :rtfm: FolderBrowserDialog.SelectedPath die Hinweise durch.

Genauere Informationen bekommst Du durch Exception.ToString statt Message; das ist in der Regel erheblich ausführlicher.

Gruß Jürgen

OK, die anderen waren schneller, aber ich habe eine vollständigere Antwort gegeben. 😁

P
PeterB Themenstarter:in
41 Beiträge seit 2009
vor 15 Jahren

Oh Sorry;

dlgFolderOpen ist von FolderBrowserDialog();


FolderBrowserDialog dlgFolderOpen = new FolderBrowserDialog();

GRuß

Peter

998 Beiträge seit 2007
vor 15 Jahren

Hallo,

offensichtlich treibst zu zwischen dem Auslesen des Pfades aus dem BrowseDialog und dem Suchen nach den Dateien irgendwelchen Unfug mit dem string, denn folgender Code sollte funktionieren:


FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.ShowDialog();
string muh = fbd.SelectedPath;
string[] infos = Directory.GetFiles(muh,"*.txt",SearchOption.AllDirectories);

Also guck mal ob du dazwischen nicht evtl auf irgend eine Weise den String manipulierst...

Gruß David

P
PeterB Themenstarter:in
41 Beiträge seit 2009
vor 15 Jahren

Hi DavidT,

ich lasse den dlgFolderOpen.ShowDialog() gleich in einer if abfrage abfragen.

hier mal ein größerer Teil meines Quellcodes, da ich keinen Fehler erkennen kann.
Ich habe das alles eigentlich so wie du.



        private void Folien_Load(object sender, EventArgs e)
        {
            myGraphics = this.pictureBox1.CreateGraphics();
            
            //OpenFileDialog dlgFileOpen = new OpenFileDialog();
            //dlgFileOpen.Filter = "Bitmapdateien (*.bmp)|*.bmp";
            FolderBrowserDialog dlgFolderOpen = new FolderBrowserDialog();

            if (dlgFolderOpen.ShowDialog() == DialogResult.OK)
            {
                this.Folderpath = dlgFolderOpen.SelectedPath;

                try { this.fileEntries = Directory.GetFiles(this.Folderpath, "*.bmp", SearchOption.AllDirectories); }
                catch (Exception test) { MessageBox.Show("Exception: " + test.ToString()); }
                            
                for (int i = 0; i < this.fileEntries.Length; i++)
                {
                    this.ganzpfad = this.Folderpath+this.fileEntries[i];
                    this.imageList1.Images.Add(Bitmap.FromFile(this.ganzpfad));
                }

Vielen Dank fürs schauen

Gruß

Peter

998 Beiträge seit 2007
vor 15 Jahren

Setz mal in die Zeile im try-Block nen Breakpoint, brwose in irgend ein teifes Verzeichnis un kopiere mal den Pfad-String hier rein.

Gruß David

P
PeterB Themenstarter:in
41 Beiträge seit 2009
vor 15 Jahren

Hi DavidT

hier nun mal der Pfadstring:

	Folderpath	&quot;C:\\Programme\\Ahead\\Nero\\WaveEditor&quot;	string  

so wird er bei Debuggen angezeigt.

Gruß

Peter

U
1.688 Beiträge seit 2007
vor 15 Jahren

Hallo PeterB,

leider bist Du die Antwort auf die Frage nach der genauen Zeile des Fehlers schuldig geblieben.
Anhand des nun endlich geposteten FolderPath's und des vollständigen relevanten Quelltexts würde ich vermuten, dass der Fehler beim Laden der Bitmap auftritt und nicht im ursprünglich angegebenen try/catch.
Benutze Path.Combine, um den Namen der zu ladenden Datei zu ermitteln.

P
PeterB Themenstarter:in
41 Beiträge seit 2009
vor 15 Jahren

Ich habe es nun entlich hinbekommen.

Ich spreche die Dateien nun direkt an, da er sich den Pfad merkt und nicht mehr die Dateien über Pfad.

Vielen Dank

PeterB

J
3.331 Beiträge seit 2006
vor 15 Jahren

Zur Erklärung: Der Fehler tritt höchstwahrscheinlich hier auf (das überflüssige this habe ich gestrichen):

                    ganzpfad = Folderpath + fileEntries[i];
                    imageList1.Images.Add(Bitmap.FromFile(ganzpfad));

Folderpath enthält, wie der Debugger gezeigt hat, einen ordnungsgemäßen Pfadnamen. GetFiles liefert ein Array, für das :rtfm: sagt:

Dateinamen enthalten den vollständigen Pfad.

Na, und was kommt durch die Addition wohl heraus?

"C:\\Programme\\Ahead\\Nero\\WaveEditorC:\\Programme\\Ahead\\Nero\\WaveEditor\\myBitmap.bmp"

Konsequenz: Genaue Fehlermeldungen mit Angabe der Zeile helfen ungemein. Dann hilft vielleicht auch die eigene Fehlersuche schneller als mit zwei Tagen Arbeit, z.B. mit Nachlesen in :rtfm:

Übrigens solltest Du Dir mal NET: Richtlinien für Namen durchlesen und beachten. Das Hin- und Herspringen zwischen Groß- und Kleinschreibung, deutschen, englischen und denglischen Begriffen ist schrecklich. Namen wie imageList1 gehören sowieso verboten; da verlierst nach spätestens 14 Tagen auch Du den Überblick.

Jürgen