Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建和保存包含指定文件夹的完整文件和文件夹层次结构的XML文件?_C#_Xml_Wpf_Visual Studio - Fatal编程技术网

C# 如何创建和保存包含指定文件夹的完整文件和文件夹层次结构的XML文件?

C# 如何创建和保存包含指定文件夹的完整文件和文件夹层次结构的XML文件?,c#,xml,wpf,visual-studio,C#,Xml,Wpf,Visual Studio,这是我在网站上的第一篇帖子: 因此,基本上我需要一个gui应用程序,它可以创建和保存包含指定文件夹的完整文件和文件夹层次结构的XML文件 1.每个文件夹应符合以下条件:文件夹名称、文件夹大小字节和文件数 2.每个文件应符合以下条件:文件名、文件大小字节、文件创建、文件上次访问时间、文件上次修改时间 创建XML文件后,应用程序需要使用TreeView类显示整个文件夹层次结构树 有人能提供帮助和回答吗?谢谢 你的问题是-你能帮我申请吗-但无论如何 我会给你一些提示来开始你的项目 首先-查看MVVM。

这是我在网站上的第一篇帖子:

因此,基本上我需要一个gui应用程序,它可以创建和保存包含指定文件夹的完整文件和文件夹层次结构的XML文件

1.每个文件夹应符合以下条件:文件夹名称、文件夹大小字节和文件数

2.每个文件应符合以下条件:文件名、文件大小字节、文件创建、文件上次访问时间、文件上次修改时间

创建XML文件后,应用程序需要使用TreeView类显示整个文件夹层次结构树


有人能提供帮助和回答吗?谢谢

你的问题是-你能帮我申请吗-但无论如何

我会给你一些提示来开始你的项目

首先-查看MVVM。这将帮助您处理WPF

一,。选择起始文件夹

然后需要一个FolderPicker来开始搜索

  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;
        }
    }
为此,您需要System.Windows.Forms程序集。项目->添加引用->装配

二,。文件夹和文件

然后,您希望浏览所有文件夹

签出System.IO.Directory

三,。文件信息


签出System.IO.File-这将为您提供一些文件数据,要获得文件大小,请签出尝试以下代码。经过充分测试。从小目录开始。非常大的文件夹可能需要时间。我更新了代码以加速加载treeview

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);
            }
        }

    }
}

我建议你看一下房间。StackOverflow不是一个代码编写服务,您必须展示您迄今为止所做的尝试。询问具体的编码问题,而不是广泛的要求。谢谢!:谢谢你的评论,非常感谢你的帮助!我需要学会如何自己做这类事情。为我做一个申请太简单和愚蠢了:谢谢你的回复!虽然我在folderBrowserDialog1中遇到了问题,但代码非常清晰,编写得很好。您将什么命名为folderBrowserDialog1?抱歉,如果这个问题有点愚蠢,但我是一个初学者,希望你能理解:可能是因为我是作为WPF而不是Windows窗体来做的……它是对话框下窗体工具箱中的一个对象。像任何按钮或文本框一样添加它。确保您使用最新的代码。我移动了几行以加快加载treeview的速度。在WPF中使用object FolderBrowserDialogwell,现在,我可以成功地打开我的目录并选择一个文件夹。我对treeView1.Nodes.AddrootNode有问题;和treeView1.ExpandAll;键入treeView1后,我无法放置.Nodes或.ExpandAll。你认为这是为什么?第二个问题与字符串头=;我不理解字符串。你必须先创建xml文件。确保添加了库System.Xml和System.Xml.Linq。我正在将xml标识行和根元素目录添加到xml中。使用根目录移动到元素目录。