Autor |
Beitrag |
1Csharpuser
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 11.06.12 02:11
Guten Abend,
Ich bin recht unerfahren im Umgang mit Programmiersprachen und arbeite mich erst seit kurzem, mit Blick auf ein nahendes Mathe Studium, in die Materie ein.
Folgendes Problem kriege ich bei C# nicht in den Griff:
Es geht um ein recht triviales Programm, dass den Inhalt einer Textdatei auslesen soll;
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| private void button1_Click(object sender, EventArgs e) { string Quellpfad = textBox1.Text; string zielpfad = textBox2.Text; string dateiname = textBox3.Text;
string bezugsordner = Path.Combine(bezugspfad, dateiname); string zielordner = Path.Combine(zielpfad, dateiname);
if (!Directory.Exists(zielpfad)) { Directory.CreateDirectory(zielpfad); }
File.Copy(bezugspfad, zielordner, true); } |
Sobald der Compiler die Methode File.Copy implementiert, wird folgende Fehlermeldung angezeigt:
"Eine nicht behandelte Ausnahme des Typs "System.UnauthorizedAccessException" ist in mscorlib.dll aufgetreten.
Zusätzliche Informationen: Der Zugriff auf den Pfad "C:\Users\Allen\testordner" wurde verweigert."
Dabei ist es unerheblich, auf welchen Ordner zugegriffen werden soll.
Meine Frage ist nun, wie kann man dem Abhilfe schaffen ?
Die Einbindung eines Anwendungsmanifests, welches dem Programm Administratorenrechte zugesteht, führt leider ebenfalls zu selbigen Fehler.
Moderiert von Christian S.: C#-Tags hinzugefügt
Moderiert von Christian S.: Topic aus Basistechnologien verschoben am Mo 11.06.2012 um 07:49
|
|
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Mo 11.06.12 16:16
Zeig doch mal die Pfad-Daten oder der Einfachheit halber ein Screenshot der Oberfläche, in der du die Daten eingibst.
Einfach einen Test-Pfad, Test-Name, etc. bei dem es definitiv NICHT funktioniert.
Das Einzige, was mir da bei dem Code noch auffällt, ist, dass du erlaubst, eine bereits vorhandene, gleichnamige Datei zu überschreiben. Da ich nicht weiß, welche Daten du angibst, und wie das Ziel genau aussieht, werfe ich einfach mal die Möglichkeit in den Raum, dass irgendein Programm (oder eventuell dein selbst geschriebenes Programm) die zu überschreibende Datei verwendet und Veränderungen blockiert.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 11.06.12 16:19
Hallo!
Du verwendest die Variable "bezugspfad", die wird in Deiner Methode aber nirgendwo deklariert oder zugewiesen. Ist das nur ein Fehler beim Kopieren des Quelltextes ins Forum oder ist das auch bei Dir im Programm so?
Und wenn ich das richtig deute, enthielte die, würde sie denn zugewiesen, einen Ordner und keinen Pfad zu einer Datei, der steckt widersprüchlicherweise in "bezugsordner"
Viele Grüße,
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
1Csharpuser 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 11.06.12 21:59
Palladin007 hat folgendes geschrieben : | Zeig doch mal die Pfad-Daten oder der Einfachheit halber ein Screenshot der Oberfläche, in der du die Daten eingibst.
Einfach einen Test-Pfad, Test-Name, etc. bei dem es definitiv NICHT funktioniert.
Das Einzige, was mir da bei dem Code noch auffällt, ist, dass du erlaubst, eine bereits vorhandene, gleichnamige Datei zu überschreiben. Da ich nicht weiß, welche Daten du angibst, und wie das Ziel genau aussieht, werfe ich einfach mal die Möglichkeit in den Raum, dass irgendein Programm (oder eventuell dein selbst geschriebenes Programm) die zu überschreibende Datei verwendet und Veränderungen blockiert. |
Ich hab mal ein Screenshot von der Benutzeroberfläche angefertigt. Die Datei "Test.txt" befindet sich im Ordner "Testordner" (also der Bezugspfad), der sich wiederum, zusammen mit den "Zielordner" (also der Zielpfad) in "C:\Users\Allen" befindet. "C:\Users\Allen" ist nicht schreibgeschützt.
Selbiges Problem tritt im Übrigen auch auf, wenn ich z.B. Textdateien vom Typ txt einfach nur auslesen will (also mit filestream und streamreader):
Wenn ich eine beliebige Textdatei, einfach nur auslesen will und den Text in einem Label ausgeben will, so tritt der Fehler ebenso auf; einzige Ausnahme: Die Textdatei befindet sich im selben Ordner wie das entsprechende Programm, also z.B. C:\Users\Allen\Documents\Visual Studio 2010\Projects\x\bin\Debug
Christian S. hat folgendes geschrieben : | Hallo!
Du verwendest die Variable "bezugspfad", die wird in Deiner Methode aber nirgendwo deklariert oder zugewiesen. Ist das nur ein Fehler beim Kopieren des Quelltextes ins Forum oder ist das auch bei Dir im Programm so?
Und wenn ich das richtig deute, enthielte die, würde sie denn zugewiesen, einen Ordner und keinen Pfad zu einer Datei, der steckt widersprüchlicherweise in "bezugsordner"
Viele Grüße,
Christian |
Ahhh... stimmt, den "Bezugsordner" wollte ich erst später zu anderen Zwecke verwenden, ich habe Das versehentlich mit reinkopiert. Habe das Programm nochmal getestet, für das Problem ist das jedoch offenbar unerheblich.
Einloggen, um Attachments anzusehen!
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 11.06.12 22:18
Das heißt Du übergibst File.Copy auf jeden Fall Dateien und keine Ordner, mit denen es arbeiten soll?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
1Csharpuser 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 11.06.12 23:30
Christian S. hat folgendes geschrieben : | Das heißt Du übergibst File.Copy auf jeden Fall Dateien und keine Ordner, mit denen es arbeiten soll? |
Daran könnte es liegen, ich übergebe File.Copy ja letztendlich 2 Pfadangaben, die auf eine Datei bzw. den Ort an den die Datei hinkopiert werden soll verweisen müssen.
Ich habe den Code noch mal ein wenig geändert;
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| private void button1_Click(object sender, EventArgs e) { string bezugspfad = textBox1.Text; string zielpfad = textBox2.Text; string dateiname = textBox3.Text;
string zielordner = Path.Combine(zielpfad, dateiname); string bezugsordner = Path.Combine(bezugspfad, dateiname);
if (!Directory.Exists(zielpfad)) { Directory.CreateDirectory(zielpfad);
}
File.Copy(bezugsordner, zielordner, true);
} |
... Und schon stellen wir den nächsten Fehler fest:
"Eine nicht behandelte Ausnahme des Typs "System.IO.FileNotFoundException" ist in mscorlib.dll aufgetreten.
Zusätzliche Informationen: Die Datei "C:\Users\Test.txt" konnte nicht gefunden werden."
Es ist doch schon recht mühselig, mit Verzeichnisstrukturen zu arbeiten. Die Datei wird nicht gefunden, obgleich sie dort hinterlegt ist.
Moderiert von Christian S.: C#-Tags hinzugefügt
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 11.06.12 23:36
Wenn sie da läge, würde sie gefunden.
Sicher, dass die direkt im Ordner "c:\users" liegt und nicht im Ordner für das entsprechende Benutzerprofil?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
1Csharpuser 
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 12.06.12 00:01
Christian S. hat folgendes geschrieben : | Wenn sie da läge, würde sie gefunden.
Sicher, dass die direkt im Ordner "c:\users" liegt und nicht im Ordner für das entsprechende Benutzerprofil? |
Ja !
Es ist mir wirklich so langsam ein Rätsel.
Einloggen, um Attachments anzusehen!
|
|
mats74
      
Beiträge: 189
Erhaltene Danke: 26
Win 10
VS 2017/19, C++, C#
|
Verfasst: Di 12.06.12 07:37
Hallo
Folgender Code funktioniert bei mir:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| string zielpfad = @"C:\Hallo"; string dateiname = @"Hallo.txt";
if (!Directory.Exists(zielpfad)) { Directory.CreateDirectory(zielpfad); }
File.Copy(@"C:\Temp\Hallo.txt", zielpfad + @"\" + dateiname, true); |
Beachte den Hinweis bei der Create-Methode, die den Zugriff für andere Prozesse blockiert bis das Handle abgeschlossen ist.
Vielleicht hilft Dir das dein Problem zu lösen.
Edit:
Ich benütze bei solchen Aufgaben meistens die FileStream-, StreamWriter- und StringBuilder-Klassen direkt anstelle der File-Klasse.
Es entfällt nützlicherweise dabei die Handle-Exception beim Zugriff durch andere Prozesse und man hat einige Möglichkeiten mehr bei der Datenverarbeitung der Dateiinhalte zur Verfügung.
_________________ Gruss
mats74
|
|
ujr
      
Beiträge: 102
Erhaltene Danke: 12
|
Verfasst: Di 12.06.12 12:09
Hallo,
die Datei heißt nicht zufällig "test.txt.txt"? Probier's mal damit.
Für diesen Beitrag haben gedankt: 1Csharpuser
|
|
1Csharpuser 
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 12.06.12 22:30
ujr hat folgendes geschrieben : | Hallo,
die Datei heißt nicht zufällig "test.txt.txt"? Probier's mal damit. |
Exakt !
Mensch, dies hätte mir doch früher auffallen müssen, die Datei war tatsächlich als Test.txt.txt im Ordner hinterlegt, dann ist es ja ganz klar, dass sie nicht auffindbar ist. Jedenfalls funktioniert der Kopiervorgang nun reibungslos.
Ein Dankeschön an alle die geholfen haben !
|
|
|