这是C#/.NET 2.0.
所以我有一个包含XML文件未来内容的字符串.它包含来自图像文件的元数据和二进制数据.一旦我将字符串中的数据写入文件系统,我想以某种方式确定XML文件的大小.
我尝试过以下内容并且都不起作用:
Console.Out.WriteLine("Size: " + data.Length/1024 + "KB");
Run Code Online (Sandbox Code Playgroud)
和
Console.Out.WriteLine("Size: " + (data.Length * sizeof(char))/1024 + "KB");
Run Code Online (Sandbox Code Playgroud)
两者都不起作用(生成的文件的实际大小与这些方法中的任何一个返回的大小不同).我显然在这里遗漏了一些东西.任何帮助,将不胜感激.
XML序列化:
// doc is an XMLDocument that I've built previously
StringWriter sw = new StringWriter();
doc.Save(sw);
string XMLAsString = sw.ToString();
Run Code Online (Sandbox Code Playgroud)
写入文件系统(XMLAsString作为变量命名数据传递给此函数):
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();
Run Code Online (Sandbox Code Playgroud)
谢谢
Kev*_*son 10
你错过了编码过程的工作原理.试试这个:
string data = "this is what I'm writing";
byte[] mybytes = System.Text.Encoding.UTF8.GetBytes(data);
Run Code Online (Sandbox Code Playgroud)
如果以一种"正常"的方式写入数组,那么数组的大小就是它应该在磁盘上占用的字节数,因为UTF8是文本输出的默认编码(我认为).可能会写一个额外的EOF(文件结束)字符,但你应该非常接近.
编辑:我认为每个人都要记住,C#/ .NET中的字符不是一个字节长,而是两个,并且是unicode字符,然后编码为输出格式所需的任何字符.这就是为什么任何方法data.Length*sizeof(char)都行不通的原因.