using System;
using System.Collections.Generic;
using System.IO;
class Program
{
static void Main()
{
// Get all files in Documents
List<string> dirs = FileHelper.GetFilesRecursive("S:\\bob.smith\\");
foreach (string p in dirs)
{
Console.WriteLine(p);
}
// Write count
Console.WriteLine("Count: {0}", dirs.Count);
Console.Read();
}
}
static class FileHelper
{
public static List<string> GetFilesRecursive(string b)
{
// 1.
// Store results in the file results list.
List<string> result = new List<string>();
// 2.
// Store a stack of our directories.
Stack<string> stack = new Stack<string>();
// 3.
// Add initial directory.
stack.Push(b);
// 4.
// Continue while there are directories to process
while (stack.Count > 0)
{
// A.
// Get top directory
string dir = stack.Pop();
try
{
// B
// Add all files at this directory to the result List.
result.AddRange(Directory.GetFiles(dir, "*.*"));
// C
// Add all directories at this directory.
foreach (string dn in Directory.GetDirectories(dir))
{
stack.Push(dn);
}
}
catch
{
// D
// Could not open the directory
}
}
return result;
var k = "";
result = k;
}
}
这是我的代码。我试图将结果序列化为XML文件(我想通过将其传递给var
,我可以使用该变量进行序列化)。我很有智慧。请有人帮忙。
答案 0 :(得分:7)
您可以使用XmlSerializer:
using System.Xml.Serialization;
static void Main()
{
// Get all files in Documents
List<string> dirs = FileHelper.GetFilesRecursive(@"S:\\bob.smith\\");
XmlSerializer x = new XmlSerializer(dirs.GetType());
x.Serialize(Console.Out, dirs);
Console.Read();
}
答案 1 :(得分:3)
如果您只想输出dirs列表的内容,那么使用XmlWriter可能最简单:
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(@"c:\path\filename.xml", settings))
{
writer.WriteStartElement("dirs");
dirs.ForEach(d => writer.WriteElementString("dir", d));
writer.WriteEndElement(); // dirs
}
结果如下:
<?xml version="1.0" encoding="utf-16"?>
<dirs>
<dir>c:\</dir>
<dir>c:\Program Files</dir>
...
</dirs>
请注意,这可能不是在讨论.NET中的序列化时通常意味着什么,因为它除了其他内容之外不包含有关包含数据的对象类型的信息,因此您不能使用它来反序列化xml使用框架中可用的序列化机制将数据转换为List。
<强>更新强>
如果您想更多地使用“框架式”,您可以使用BinaryFormatter:
// serialize the object to disk
BinaryFormatter formatter = new BinaryFormatter();
using (Stream stream = File.OpenWrite(@"c:\temp\dirlist.data"))
{
formatter.Serialize(stream, dirs);
}
// at some other point, when you want to deserialize
BinaryFormatter formatter = new BinaryFormatter();
List<string> dirList;
using (Stream stream = File.OpenRead(@"c:\temp\dirlist.data"))
{
dirList = (List<string>)formatter.Deserialize(stream);
}
在这种情况下,您将在磁盘上获得一个二进制文件,这在文本编辑器中没有意义(但它看起来像这样;我已经引入了一些换行符以使其更具“可读性”):
ÿÿÿÿ System.Collections.Generic.List`1[[System.String, mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
_items_size_version c:\ c:\Program Files
答案 2 :(得分:2)
我不希望听起来很卑鄙,但从您的问题来看,您似乎缺少一些与序列化有关的非常重要和基本的概念。
This tutorial可能是开始序列化的好地方。试试这个,如果你有问题,可以随时在SO上发布。
希望这有帮助,
答案 3 :(得分:1)
另外,您可以使用
获取所有子文件夹中的所有文件Directory.GetFiles(@"S:\\bob.smith\\", "*.*", SearchOption.AllDirectories)