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