以千字节获取字符串的大小

时间:2014-04-17 11:41:08

标签: vb.net string size byte

我喜欢以千字节为单位获取字符串的大小。 我的尝试是这样的:

  Sub Main()
    Dim Test As String = System.IO.File.ReadAllText("C:\Users\Blubb\Documents\TOS.txt")
    MsgBox("The String 'Test' has a size of " & System.Text.ASCIIEncoding.Unicode.GetByteCount(Test) / 1024 & " kilobytes.")
End Sub

enter image description here

但是由于一个严重的原因,文本文件本身是12kb。

enter image description here

我上面的代码返回更大的尺寸:

enter image description here

我在这里做错了什么?

----------------已解决,感谢Steven Doggart --------------

Private Function GetStringSizeInKiloBytes(ByVal Text As String) As Double
    Return Encoding.ASCII.GetByteCount(KeyLog) / 1024
End Function

3 个答案:

答案 0 :(得分:2)

您无需读取文件即可获得大小。试试这个

var length = new FileInfo("yourfilename").Length

当然你可以将它除以1024以获得KB的大小。

答案 1 :(得分:2)

将文件加载到字符串后,无论原始文件的格式如何,都会立即将其编码为Unicode。所以你看到的不是文件的大小,而是该文件内容的Unicode字符串表示的大小。根据您的结果,您正在加载的文件看起来像是一个ASCII文件(每个字符一个字节),但是当您获得unicode中的字节数(通常每个字符2个字节)时,它的大小加倍。

正如其他人所说,如果您想要的只是文件长度,您可以通过FileInfo.Length属性获取它,这样效率会更高。例如:

Dim Test As New FileInfo("C:\Users\Blubb\Documents\TOS.txt")
MessageBox.Show("The file has a size of " & Test.Length / 1024 & " kilobytes.")

但是,如果您确实需要首先加载文件,最好的方法是直接读取字节而不是将其加载到Unicode编码的字符串中:

Dim Test() As Byte = System.IO.File.ReadAllBytes("C:\Users\Blubb\Documents\TOS.txt")
MessageBox.Show("The byte array 'Test' has a size of " & Test.Length / 1024 & " kilobytes.")

请注意,我使用MessageBox.Show,这比旧的VB6风格的MsgBox函数更好。或者,如果您确实需要将其作为字符串加载,出于某种原因,您只需确保使用相同的编码将字节计数为原始文件的实际编码:

Dim Test As String = System.IO.File.ReadAllText("C:\Users\Blubb\Documents\TOS.txt")
MessageBox.Show("The file loaded into the string 'Test' has a size of " & Encoding.ASCII.GetByteCount(Test) / 1024 & " kilobytes.")

修改

作为另一个例子,使用您在另一个评论中作为示例提供的字符串:

Dim Test As String = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

'Displays 0,436... kilobytes
MessageBox.Show("ASCII size of 'Test': " & Encoding.ASCII.GetByteCount(Test) / 1024 & " kilobytes.")

'Displays 0,871... kilobytes
MessageBox.Show("Unicode size of 'Test': " & Encoding.Unicode.GetByteCount(Test) / 1024 & " kilobytes.")

如您所见,Unicode编码的大小是字节的两倍。但两者都是同一文本的表示,只是使用不同的字节格式。

答案 2 :(得分:1)

您可以尝试使用

获取文件大小
int fileSize = new FileInfo("path_to_file").Length;