Autor Beitrag
1Csharpuser
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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;



ausblenden 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 user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus Basistechnologien verschoben am Mo 11.06.2012 um 07:49
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 11.06.12 21:59 
user profile iconPalladin007 hat folgendes geschrieben Zum zitierten Posting springen:
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



user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 11.06.12 23:30 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
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;

ausblenden 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 user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 12.06.12 00:01 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Di 12.06.12 07:37 
Hallo

Folgender Code funktioniert bei mir:
ausblenden 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);
            }

            // Folgende Anweisung wirft eine Exception
            // da andere Prozesse oder anderer Code erst auf die Datei zugreifen können,
            // wenn das ursprüngliche Dateihandle geschlossen wird.
            //if (!File.Exists(@"C:\Temp\Hallo.txt"))
            //{
            //    File.Create(@"C:\Temp\Hallo.txt");
            //}

            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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 102
Erhaltene Danke: 12



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 12.06.12 22:30 
user profile iconujr hat folgendes geschrieben Zum zitierten Posting springen:
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 !