我正在尝试做一些项目并坚持下去。我正在做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,然后保存它并使用一些函数/循环来查看大小,打印它们等但是我很困惑,因为我之前从未见过这种编程语言。
让我说现在的问题是我有大小的字节数,但没有多少字母,我缺少根元素(这就是编译器所说的)。我没有使用序列化,所以我拿了一些我熟悉的东西(数组或列表)。
答案 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”。
解决方案的文字说明:
Directories/Files
要使用的一些代码(缺少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());