2017-05-23 3 views
-5

Dies ist mein erster Beitrag hier auf der Website :)Wie erstellt und speichert man eine XML-Datei mit einer vollständigen Hierarchie von Dateien und Ordnern für einen bestimmten Ordner?

Also im Grunde brauche ich eine GUI-Anwendung, die XML-Datei erstellen und speichern kann, die vollständige Hierarchie von Dateien und Ordnern für einen angegebenen Ordner enthält.

1.Jeder Ordner sollte qualifiziert sein mit: Ordnername, Ordnergröße (Bytes) und Anzahl der Dateien.

2.Jede Datei sollte qualifiziert werden mit: Dateiname, Dateigröße (Bytes), Dateierstellung, letzte Zugriffszeit der Datei, letzte Änderungszeit der Datei.

Nachdem die XML-Datei erstellt wurde, muss die Anwendung den gesamten Ordnerhierarchiebaum anzeigen (mithilfe der TreeView-Klasse).

Kann jemand helfen und antworten? Vielen Dank!

+1

Ich würde vorschlagen, dass Sie über die ['Wie man eine Frage stellen' FAQ] (https://stackoverflow.com/help/how-to-ask) schauen. StackOverflow ist kein Code Writing Service, Sie müssen zeigen, welchen Versuch Sie bisher unternommen haben. Stellen Sie spezifische Codierungsprobleme, nicht breite Anforderungen. – sab669

+0

Danke! :) Ich freue mich über Ihren Kommentar – Snailtamer

Antwort

1

Versuchen Sie folgenden Code zu erhalten . Vollständig getestet. Beginne mit einem kleinen Verzeichnis. Sehr große Ordner brauchen Zeit. Ich habe Code aktualisiert, um das Laden der Baumansicht zu beschleunigen.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
using System.Xml; 
using System.Xml.Linq; 

namespace WindowsFormsApplication29 
{ 
    public partial class Form1 : Form 
    { 
     XDocument doc = null; 
     public Form1() 
     { 
      InitializeComponent(); 

      folderBrowserDialog1.SelectedPath = @"c:\temp"; 

     } 

     private void buttonBrowseForFolder_Click(object sender, EventArgs e) 
     { 
      folderBrowserDialog1.ShowDialog(); 
      textBoxFolderName.Text = folderBrowserDialog1.SelectedPath; 
     } 

     private void buttonCreateXml_Click(object sender, EventArgs e) 
     { 
      if(Directory.Exists(textBoxFolderName.Text)) 
      { 
       string header = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Directory></Directory> "; 
       doc = XDocument.Parse(header); 
       XElement root = doc.Root; 

       CreateXmlRecursive(textBoxFolderName.Text, root); 
      } 
     } 
     private float CreateXmlRecursive(string folder, XElement folderElement) 
     { 
      folderElement.SetValue(folder); 

      DirectoryInfo dInfo = new DirectoryInfo(folder); 

      int numberOfFiles = 0; 
      float size = 0.0f; 

      foreach(FileInfo fInfo in dInfo.GetFiles()) 
      { 
       try 
       { 
        float fSize = fInfo.Length; 
        size += fSize; 
        folderElement.Add(new XElement("File", new object[] { 
         new XAttribute("size",fSize), 
         new XAttribute("creationDate", fInfo.CreationTime.ToShortDateString()), 
         new XAttribute("lastAccessDate", fInfo.LastAccessTime.ToShortDateString()), 
         new XAttribute("lastModifiedDate", fInfo.LastWriteTime.ToShortDateString()), 
         fInfo.Name 
        })); 
        numberOfFiles += 1; 
       } 
       catch(Exception e) 
       { 
        Console.WriteLine("Error : CAnnot Access File '{0}'", fInfo.Name); 
       } 
      } 
      foreach(string subFolder in Directory.GetDirectories(folder)) 
      { 
       XElement childDirectory = new XElement("Directory"); 
       folderElement.Add(childDirectory); 
       float dSize = CreateXmlRecursive(subFolder, childDirectory); 
       size += dSize; 
      } 
      folderElement.Add(new XAttribute[] { 
       new XAttribute("size", size), 
       new XAttribute("numberOfFiles", numberOfFiles) 
      }); 

      return size; 
     } 

     private void buttonCreateTree_Click(object sender, EventArgs e) 
     { 
      if (doc != null) 
      { 
       TreeNode rootNode = new TreeNode(doc.Root.FirstNode.ToString()); 
       AddNode(doc.Root, rootNode); 
       treeView1.Nodes.Add(rootNode); 
       treeView1.ExpandAll(); 
      } 

     } 
     private void AddNode(XElement xElement, TreeNode inTreeNode) 
     { 

      // An element. Display element name + attribute names & values. 
      foreach (var att in xElement.Attributes()) 
      { 
       inTreeNode.Text = inTreeNode.Text + " " + att.Name.LocalName + ": " + att.Value; 
      } 
      // Add children 
      foreach (XElement childElement in xElement.Elements()) 
      { 
       TreeNode tNode = inTreeNode.Nodes[inTreeNode.Nodes.Add(new TreeNode(childElement.Value))]; 
       AddNode(childElement, tNode); 
      } 
     } 

    } 
} 
+0

Vielen Dank für Ihre Antwort! Code ist ziemlich klar und schön geschrieben tho Ich habe Probleme mit "folderBrowserDialog1". was hast du als "ordnerBrowserDialog1" bezeichnet? Entschuldigung, wenn diese Frage ein wenig dumm ist, aber ich bin ein Anfänger, hoffe, Sie werden Verständnis :)) Vielleicht weil ich es als WPF und nicht als Windows Form ... – Snailtamer

+0

Es ist ein Objekt in der Toolbox auf der Formular unter Dialoge. Fügen Sie es wie eine beliebige Schaltfläche oder Textbox hinzu. Stellen Sie sicher, dass Sie den neuesten Code verwenden. Ich habe ein paar Zeilen verschoben, um die Baumansicht schneller zu machen. – jdweng

+0

In WPF verwenden Objekt FolderBrowserDialog – jdweng

1

Ihre Frage ist - können Sie meine Bewerbung für mich tun - aber trotzdem.

Ich gebe Ihnen einige Hinweise, um mit Ihrem Projekt zu beginnen.

Zunächst einmal - Check out MVVMhere. Dies wird Ihnen helfen - WPF zu behandeln.

1. die Startordner Wählen

Dann benötigen Sie ein FolderPicker Ihre Suche nach diesem

public static string PickFolder() 
    { 
     var dialog = new System.Windows.Forms.FolderBrowserDialog(); 
     System.Windows.Forms.DialogResult result = dialog.ShowDialog(); 

     string folder = string.Empty; 
     switch (result) 
     { 
      case System.Windows.Forms.DialogResult.OK: return dialog.SelectedPath; 
      case System.Windows.Forms.DialogResult.Cancel: return string.Empty; 
      default: return string.Empty; 
     } 
    } 

U müssen die System.Windows.Forms Versammlung zu starten. (Projekt -> Add Referenz -> Assembly)

2. Ordner und Dateien

Dann Sie durch alle Ordner itterate möchten.

Check out System.IO.Directoryhere

3. Dateiinformationen

Check out System.IO.Filehere - das finden Sie einige Dateidaten geben und die Dateigröße Check this out

+0

Vielen Dank für Ihre Hilfe! Ich muss lernen, wie ich solche Sachen selbst machen kann. Eine Bewerbung für mich wäre einfach zu einfach und dumm :) – Snailtamer

Verwandte Themen