C#层次结构的文件夹

时间:2016-11-24 11:34:41

标签: c# xml

我正在尝试做一些项目并坚持下去。我正在做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.");}


        }
} 

我知道这个想法 - 制作文件和文件夹,我使用数组文件和另一个文件夹希望知道如何使它们成为一个XML,然后保存它并使用一些函数/循环来查看大小,打印它们等但是我很困惑,因为我之前从未见过这种编程语言。

让我说现在的问题是我有大小的字节数,但没有多少字母,我缺少根元素(这就是编译器所说的)。我没有使用序列化,所以我拿了一些我熟悉的东西(数组或列表)。

1 个答案:

答案 0 :(得分:2)

这种方法不是最有用的方法,因为如果文件夹中有文件,你会怎么做?旁边还有另一个文件夹与另一个文件?

|-- Folder1
|   |- File1
|   |- File2
|-- Folder2
|   |- File3
|   |- File4

从另一方面解决问题,您可能会使用名为OOP - Object Oriented Programming的内容,其中您有多个类,您将实例化为对象,对象将了解其他对象(例如,文件夹将了解内部文件和vica亦然)。

感谢您,Microsoft已经在.NET中创建了这个结构,它可以在命名空间System.IO - link to MSDN中找到。

对于最初的想法/方法,请查看https://msdn.microsoft.com/en-us/library/dd997370(v=vs.110).aspx,其中描述了如何浏览所有的directiories /文件&amp;获取有关他们的信息。

一旦你有了这种类的结构(文件/目录),就可以转到序列化了。即使您对此不熟悉,.NET也为大多数类提供了XmlSerializer,您只需要创建自己的类,它将告诉Serializer“How to serialize my class”。

解决方案的文字说明:

  • 创建新课程(例如 FileTreeManager
  • 添加一些包含Directories/Files
  • 的属性/变量
  • 实现接口IXmlSerializable(类必须继承这个,所以XmlSerializer知道如何序列化)

要使用的一些代码(缺少XML部分):

public class FileTreeManager
{
    private DirectoryInfo mDirectoryInfo;

    public FileTreeManager(string aEntryPoint)
    {
        SetEntryPoint(aEntryPoint);
    }

    public void SetEntryPoint(string aEntryPoint)
    {
        this.mDirectoryInfo = new DirectoryInfo(aEntryPoint);
    }

    public override string ToString()
    {
        StringBuilder result = new StringBuilder();
        foreach (DirectoryInfo dir in this.mDirectoryInfo.EnumerateDirectories())
        {
            result.Append("|-- " + dir.Name + Environment.NewLine);
        }
        return result.ToString();
    }
}

你的主要看起来像:

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