C# Widersprüchliche Exception

Registriert
Mai 2007
Beiträge
150
Hallo,

Schaut euch mal das Bild an, ich verstehe nicht, wie es zu diesem Fehler kommen kann.

lg Stefan

unbenannt-jpg.251841


(im Anhang kann man es besser lesen)
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    78,2 KB · Aufrufe: 351
nimm die überladene Funktion mit "overwrite" - boolean Parameter:

http://msdn.microsoft.com/en-us/library/9706cfs5(v=VS.90).aspx


also:
file.copy(source,dest,true);

ansonten würde ich mir direkt angewöhnen an solch kritischen stellen mit exceptions zu arbeiten. so braucht man im Regelfalle nicht auf Pfadkorrektheit zu prüfen.

try
{
file.copy();

}
catch (exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
}
 
Zuletzt bearbeitet:
Rufst du das ganze vlt. in 'nem Loop auf?

Alternativ, kannst du auch Copy dazu bewegen die Datei zu überschreiben, was allerdings eher eine Quick'n Dirty Lösung wäre ;)
 
Warum setzt du zwei "\"? Das fürt dazu, dass er einen namenlosen Ordner als zwischenebene erstellt.
Da wir nicht wissen, was für werte deine Variablen haben würder ich dir mal allgemein raten bei der File.exists Abrage die selben Variblen wie beim kopieren zu verwenden.
mfg Verata
 
Wenns nicht performance-kritisch ist kann man sich die Exists-Abfrage auch sparen und das ganze in einen Try-Catch kapseln.

Interessant wärs aber schon, weshalb der Exists nicht greift... ich seh da keinen Tippfehler oder so der einen Unterschied erklären würde. Laufen da mehrere Threads oder Prozesse gleichzeitig?


@Verata: er setzt doch nur einen "\" und escaped diesen ganz korrekt durch einen "\", wo ist das Problem?
 
Obwohl ich kein C# beherrsche, fällt mir auf, dass die Exception einfach nicht behandelt wird. Dazu brauchst du scheinbar wie in Java einen Try-Catch-Block, in dem du festlegst, wie mit der Exception umgegangen werden soll.

Das steht so auch in der Überschrift der Fehlermeldung...
 
Ja, die Exception wurde nicht behandelt... aber weshalb tritt sie auf? Er prüft ja vorher auf Nichtexistenz der Datei... der Fehler dürfte nicht passieren (außer durch Nebenläufigkeit oder ich übersehe auch etwas)
 
The_1st_Knight schrieb:
Obwohl ich kein C# beherrsche, fällt mir auf, dass die Exception einfach nicht behandelt wird. Dazu brauchst du scheinbar wie in Java einen Try-Catch-Block, in dem du festlegst, wie mit der Exception umgegangen werden soll.

Das steht so auch in der Überschrift der Fehlermeldung...


Ohje :rolleyes:

@StefanDinslaken: Es wäre durchaus hilfreich wenn du uns noch etwas Code zeigst und eventuell die Frage von holy beantworten würdest.
 
Bei sowas ist es im Grunde auch immer ganz sinnvoll, sich den fertigen Zieldateinamen nur einmal zusammenzubauen (in ner neuen Variable) und in beiden Methoden dann verwenden. Das wird hier aber nicht die Ursache sein.

Aber mehr Infos wären nicht schlecht... idealerweise die ganze Methode... oder zumindest dass man sehen kann, wo die Variablen überall "herkommen" und geändert werden können...
 
Zuletzt bearbeitet:
Alternativ kann man auch einfach mal mit nem Debugger dadurch steppen... Dann sieht man es auch direkt.
 
Hier einmal die ganze Methode. Durchsteppen ist unerträglich, da die Methode 4000x hintereinander aufgerufen wird.

Code:
public void now_export()
        {
            foreach (sender s in MainForm.sender.list)
            {
                if (s.export && Directory.Exists(s.export_dir))
                {
                    DataRow[] erg = erg = MainForm.datatable.Select("XMLNode LIKE '" + s.id + "_*'");
                    String dir = s.export_dir;
                    foreach (DataRow r in erg)
                    {
                        String artist = r.ItemArray[1].ToString();
                        String title = r.ItemArray[0].ToString();

                        foreach (char u in Path.GetInvalidPathChars())
                        {
                            if (artist.Contains(u)) artist = artist.Replace(u, '_');
                            if (title.Contains(u)) title = title.Replace(u, '_');
                        }
                        foreach (char u in Path.GetInvalidFileNameChars())
                        {
                            if (artist.Contains(u)) artist = artist.Replace(u, '_');
                            if (title.Contains(u)) title = title.Replace(u, '_');
                        }

                        if (!Directory.Exists(s.export_dir + "\\" + artist))
                        {
                            Directory.CreateDirectory(s.export_dir + "\\" + artist);
                        }
                        if (!File.Exists(s.export_dir + "\\" + artist + "\\" + artist + " - " + title + ".mp3"))
                        {
                            File.Copy(MainForm.mymusic + "\\records\\" + r.ItemArray[5].ToString(), s.export_dir + "\\" + artist + "\\" + artist + " - " + title + ".mp3");
                        }
                    }
                }
            }
        }
 
Doppelte Einträge im Array?

Bricht er generell ab oder nur bei einer bestimmten Datei?
 
Also aus deinem Code werde ich nich wirklich Schlau. Ich les mir den jetzt zum 3. mal durch und steig nich hinter was du machst.

Rein von der Ansicht her, sieht man den Fehler nicht. Du musst dich also im Exception Fall mal reinhangeln und alle Variablen checken ob die vielleicht wirklich nicht schon vorhanden sind die Dateien usw.

Btw der Code ist teilweise super unsauber, du solltest dir das nochmal genauer anschauen und für Ordnung sorgen.
 
Ich denke das der Pfad in der Exist methode nicht gefunden wird, da er relativ ist.

Du fängst ja mit s.export_dir an. Was verbirgt sich genau dahinter? Kannst du mal das, was er prüft in der Konsole oder so ausgeben um zu gucken, auf was er genau prüft. Wenn der Pfad relativ ist, muss es auch zum Programm passen. Ansonsten Pfad absolut anpassen.
 
Das einzige was ich garnicht nachvollziehen kann, ist folgendes:

Code:
if (!File.Exists(s.export_dir + "\\" + artist + "\\" + artist + " - " + title + ".mp3")) {
...

Der Nachfolgende teil wird nur ausgeführt, wenn die Datei s.export_dir + "\\" + artist + "\\" + artist + " - " + title + ".mp3" nicht existiert. Und wenn man dann an deren Ort eine Datei kopieren will, kommt trotzdem die Meldung, das die Datei schon existiert.
 
Lese mal bitte meinen Post vor deinem ;) Und gibt dir mal in der Konsole aus, welchen Pfad er auf Existenz prüft. Ich denke der Pfad is relativ und wird deshalb nicht gefunden. Ausgabe in die Konsole oder sowas. Schon bist du schlauer ;)

Mach doch mal:

Code:
if (!File.Exists(MainForm.mymusic + "\\records\\" + r.ItemArray[5].ToString(), s.export_dir + "\\" + artist + "\\" + artist + " - " + title + ".mp3"))
                        {
                            File.Copy(MainForm.mymusic + "\\records\\" + r.ItemArray[5].ToString(), s.export_dir + "\\" + artist + "\\" + artist + " - " + title + ".mp3");
                        }

Denn hier fragst du den kompletten Pfad ab.
 
@chriz0101: Der Pfad ist nicht relativ wie du in der Exception-Meldung lesen kannst...
Und was für nen Quatsch postest du denn dann? oO

Quelldatei ist: MainForm.mymusic + "\\records\\" + r.ItemArray[5].ToString()
Zieldatei ist: s.export_dir + "\\" + artist + "\\" + artist + " - " + title + ".mp3"

Du hast das Komma, das bei der ein oder anderen Programmiersprache zur Trennung von Parametern verwendet wird, schon gesehen? oO
 
Zurück
Oben