这是 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/