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