这是 C#/.NET 2.0。

所以我有一个包含 XML 文件 future 内容的字符串。它包含来自图像文件的元数据和二进制数据。我想以某种方式确定将字符串中的数据写入文件系统后 XML 文件的大小。

我尝试了以下方法,但都不起作用:

Console.Out.WriteLine("Size: " + data.Length/1024 + "KB");


Console.Out.WriteLine("Size: " + (data.Length * sizeof(char))/1024 + "KB");

两者都不起作用(结果文件的实际大小与这些方法中的任何一个返回的大小不同)。我显然在这里遗漏了一些东西。任何帮助,将不胜感激。

XML 序列化:
// doc is an XMLDocument that I've built previously
StringWriter sw = new StringWriter();
doc.Save(sw);
string XMLAsString = sw.ToString();

写入文件系统(XMLAsString 作为名为 data 的变量传递给此函数):
Random rnd = new Random(DateTime.Now.Millisecond);
FileStream fs = File.Open(@"C:\testout" + rnd.Next(1000).ToString() +  ".txt", FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fs);
app.Diagnostics.Write("Size of XML: " + (data.Length * sizeof(char))/1024 + "KB");
sw.Write(data);
sw.Close();
fs.Close();

谢谢

最佳答案

您缺少编码过程的工作方式。试试这个:

string data = "this is what I'm writing";
byte[] mybytes = System.Text.Encoding.UTF8.GetBytes(data);

如果以某种“正常”的方式写入数组,则数组的大小正是它应该在磁盘上占用的字节数,因为 UTF8 是文本输出的默认编码(我认为)。可能会写入或不写入额外的 EOF(文件结尾)字符,但您应该非常接近它。

编辑:我认为每个人都应该记住 C#/.NET 中的字符不是一个字节长,而是两个字节,并且是 unicode 字符,然后将其编码为输出格式需要的任何内容。这就是为什么任何使用 data.Length*sizeof(char) 的方法都行不通的原因。

关于c# - 在数据仍在内存中时确定 future 文件的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/825944/

10-14 16:47
查看更多