Autor Beitrag
nobbiew
Hält's aus hier
Beiträge: 3

WIN XP
C# (#Develop)
BeitragVerfasst: Do 03.05.12 09:28 
Hallo

Ich habe den Auftrag unter XP (SP3) "veraltete" Home-Laufwerke zu bewerten u. ggf. zu verschieben.

Ich hab soweit auch schon alles hinbekommen. Nun scheitere ich jedoch daran, die in den Home-Laufwerken vorhandenen SpecialFolder (z.B. "Eigene Bilder", "Eigene Musik")

ausblenden volle Höhe 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:
27:
28:
29:
30:
31:
32:
33:
    static bool MoveFolder(string Source, string Target){
      if (Directory.Exists(Source)){
        
        if ( ! Directory.Exists(Target)) {
          Directory.CreateDirectory(Target);
        }
        
        DirectoryInfo SInfo = new DirectoryInfo(Source);
        DirectoryInfo TInfo = new DirectoryInfo(Target);
        foreach (FileInfo File in SInfo.GetFiles()){
          File.MoveTo(Path.Combine(Target, File.Name));
        }
        
        foreach (DirectoryInfo SubFolder in SInfo.GetDirectories()){
          MoveFolder(SubFolder.FullName, Path.Combine(Target, SubFolder.Name));
        }
        
        
        TInfo.CreationTime = SInfo.CreationTime;
        TInfo.LastWriteTime = SInfo.LastWriteTime;
        object test = Environment.SpecialFolder.MyMusic;
        DirectoryInfo ti = new DirectoryInfo(Environment.SpecialFolder.MyMusic);
        try {
          SInfo.Delete();
        } catch (Exception e) {
          Console.WriteLine(e.Message);
        }
        return true;
      } else {
        //Quellpfad ist kein Verzeichnis
        throw new Exception(Source + "ist kein Verzeichnis!");
      }
    }


Die Funktion SInfo.Delete() wirft bei den SpecialFolder den Fehler "Zugriff verweigert" obwohl die NTFS-Rechte die gleichen sind, wie bei den anderen Dateien u. Verzeichnissen, die ich verschieben kann. Ich hab schon gesucht, kann aber keinen passenden Hinweis finden.

Hat jemand eine Idee?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19322
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 03.05.12 14:51 
Hallo und :welcome:

Existieren die denn wirklich oder sind das nur lokalisierte Ordnernamen? Denn wenn da eine desktop.ini drin liegt, die diesen Namen nur generiert, existieren diese Ordner in der Realität gar nicht auf deutsch, sondern haben einen englischen Namen. Schau es dir am besten mal mit einem anderen Tool als dem Windows Explorer an oder liste die Ordner selbst mit einem eigenen Programm auf (oder schau direkt nach desktop.ini Dateien). ;-)
nobbiew Threadstarter
Hält's aus hier
Beiträge: 3

WIN XP
C# (#Develop)
BeitragVerfasst: Fr 04.05.12 09:40 
Sorry, hatte ich vergessen dazuzusagen.

Die Verzeichnisse liegen nicht auf einer Workstation, sondern werden über "HomeDirectory" aus dem AD beim Anmelden gemapped. Ich versuche nun diese HomeDirectories, die auf einem zentralen Server liegen zu bereinigen. Ich hab auch schon mit anderen Programmen die Verzeichnisse aufgelistet. Zudem kann ich ja den Inhalt der Verzeichnisse über genau diesen Pfad erreichen und verschieben (u.a. auch die dort enthaltene Desktop.ini). Ich bekomme auch mit der Klasse DirectoryInfo alle Informationen.

Der Fehler bleibt auch bestehen, wenn der Ordner definitiv leer ist (also auch die Desktop.ini gelöscht ist). Allerdings tritt der Fehler nur auf, wenn die Ordner von XP selbst angelegt wurden (auch wenn ich das HomeDirectory an einen anderen Ort kopieren. Wenn ich versuche die gleiche Struktur manuell anzulegen, kann ich die Ordner auch wieder löschen.

aber danke erst mal für dein interesse.
nobbiew Threadstarter
Hält's aus hier
Beiträge: 3

WIN XP
C# (#Develop)
BeitragVerfasst: Mo 07.05.12 10:03 
Ich hab´s endlich gefunden.

Problem ist, dass in das uralte Attribut "ReadOnly" auf diese Verzeichnisse gesetzt ist.

ausblenden C#-Quelltext
1:
2:
DirectoryInfo SInfo = new DirectoryInfo(Source);
SInfo.Attributes = FileAttributes.Directory;


mit obigem Codefragment werden die anderen Attribute gelöscht. Damit ist dann auch ein Löschen des Verzeichnisses möglich.