C#文件夹的层次结构

C#文件夹的层次结构,c#,xml,C#,Xml,我正在尝试做一些项目,并被它卡住了。我正在做java和C++,没有C语言,但是我得到了这个工作——创建并保存一个包含指定文件夹的完整文件夹层次结构的XML文件,包括所有短文件(短文件最多有8个字符的名字,最多3个字符用于扩展)。我还需要有文件和文件夹的大小在字节和字母和打印文件的小名称(小于11个字符,包括扩展名)。这是我的代码: using System; using System.IO; using System.Xml; using System.Linq; public class

我正在尝试做一些项目,并被它卡住了。我正在做java和C++,没有C语言,但是我得到了这个工作——创建并保存一个包含指定文件夹的完整文件夹层次结构的XML文件,包括所有短文件(短文件最多有8个字符的名字,最多3个字符用于扩展)。我还需要有文件和文件夹的大小在字节和字母和打印文件的小名称(小于11个字符,包括扩展名)。这是我的代码:

using System;
using System.IO;
using System.Xml;
using System.Linq;


public class Program{
    public static void Main(string[] args)
    {
        //Your code goes here

string[] folders = {"Folder1", "Folder2"};
string[] files = {"File1.txt", "File2.txt"};
XmlTextWriter w1 = new XmlTextWriter("filesandfolders.xml",  System.Text.Encoding.UTF8);
w1.WriteStartElement("Folders");
Console.WriteLine(folders[0]);
Console.WriteLine(files[0]);
Console.WriteLine(folders[1]);
Console.WriteLine(files[1]);
w1.WriteEndElement();
w1.WriteEndDocument();

File.WriteAllText("filesandfolders.xml", "structure of folders and files");

long fileSize = 0;
int fileLegth = 0;
int NumberOfShortFiles;

Console.WriteLine("Folder names are: [{0}]", string.Join(", ", folders));
Console.WriteLine("File names are: [{0}]", string.Join(", ", files));

for(long p=0; p<=files.Length; p++){

Console.WriteLine("Size of this file is "+fileSize);
}

for(int q=0; q<=files.Length; q++){

Console.WriteLine("Directory length is "+q);
}

for(int m=0; m<=11; m++){
NumberOfShortFiles = m;
}

if(fileLegth<=11){
Console.WriteLine("File name is short.");
}
else{Console.WriteLine("File name is short or not evaluated.");}


        }
} 
使用系统;
使用System.IO;
使用System.Xml;
使用System.Linq;
公共课程{
公共静态void Main(字符串[]args)
{
//你的密码在这里
string[]folders={“Folder1”,“Folder2”};
字符串[]files={“File1.txt”,“File2.txt”};
XmlTextWriter w1=新的XmlTextWriter(“filesandfolders.xml”,System.Text.Encoding.UTF8);
w1.WriteStarteElement(“文件夹”);
Console.WriteLine(文件夹[0]);
Console.WriteLine(文件[0]);
Console.WriteLine(文件夹[1]);
Console.WriteLine(文件[1]);
w1.写删除();
w1.书面文件();
writealText(“filesandfolders.xml”,“文件夹和文件的结构”);
长文件大小=0;
int fileLegth=0;
int numberofshortfile;
WriteLine(“文件夹名称为:[{0}]”,string.Join(“,”,文件夹));
WriteLine(“文件名为:[{0}]”,string.Join(“,”,files));

对于(long p=0;p这种方法不是最有益的方法,因为如果文件夹中有文件,您会怎么做?在它旁边有另一个文件夹和另一个文件

|-- Folder1
|   |- File1
|   |- File2
|-- Folder2
|   |- File3
|   |- File4
从另一个角度来看这个问题,您可以使用一种叫做的方法,在这种方法中,您有几个类,您将实例化到对象中,对象将了解其他对象(例如,文件夹将了解其中的文件,而vica则相反)

感谢您,Microsoft已经在.NET中创建了此结构,可以在namespace
System.IO
-中找到它

对于最初的想法/方法,请看,其中描述了如何浏览所有目录/文件并获取有关它们的信息

一旦有了这种类(文件/目录)结构,就应该转向序列化了。即使您不熟悉这种结构,.NET也为大多数类提供了XmlSerializer,您只需创建自己的类,它将告诉序列化程序“”

解决方案的文本说明:

  • 创建新类(例如FileTreeManager
  • 添加一些包含
    目录/文件的属性/变量
  • 实现接口IXmlSerializable(类必须继承该接口,以便XmlSerializer知道如何序列化)
要使用的某些代码(缺少XML部分):

您的主要任务如下所示:

var ftm = new FileTreeManager("C:\\");
Console.WriteLine(ftm.ToString());

您似乎忘记发布问题了,我想最好创建像
公共类文件{/*字段这样的对象来描述文件*/}
,然后派生文件夹类
公共类文件夹:文件{/*描述文件夹*/List\u filesinder;}
。然后你可以使用XmlSerializer将其序列化为XML。@m.rogalski虽然我同意你的观点,但我认为,对于刚开始的人来说,这可能太多了,甚至连它自己代码的逻辑都丢失了。@Prix我想他丢失的原因是因为所有这些代码都是在入口点中编写的。但这只是一个例子我的意见是,.@m.rogalski.NET已经有了表示文件和文件夹的类,它们是可序列化的。
var ftm = new FileTreeManager("C:\\");
Console.WriteLine(ftm.ToString());