Вычисление дискового пространства, которое занимала бы строка, не сохраняя ее на диск - PullRequest
3 голосов
/ 20 июля 2010

Я пишу приложение, в котором хочу сравнить размер двух строк. Под размером я подразумеваю дисковое пространство, которое они занимали бы, если бы они были непосредственно сохранены на диск.

Можно ли вычислить размер строки в C #, не сохраняя ее на диск и не проверяя информацию о файле (если не эффективнее сохранить ее на диск)?

Ответы [ 2 ]

8 голосов
/ 20 июля 2010

Да, это просто:

Encoding encoding = Encoding.UTF8; // Or whatever
int size = encoding.GetByteCount(text);

Обратите внимание, что это количество байтов в закодированной форме. Если ваша файловая система выполняет сжатие и т. Д., Предсказать принятый физический размер становится намного сложнее (или невозможно).

Вы делаете , хотя должны выбрать кодировку. На самом деле нет такой вещи, как «прямое» сохранение на диск - вам нужно выбрать двоичное представление.

2 голосов
/ 21 июля 2010

При сохранении данных на диск эти данные записываются в кластерах, в зависимости от размера диска и файловой системы, размер кластера меняется.

Для NTFS-дисков размером менее 16 ТБ размер кластера составляет 4 КБ, что означает, что строка размером 1 байт будет занимать 4 КБ, а строка из 5000 байтов - 8 КБ.

Вот ссылка с различными файловыми системами MS и размерами кластеров по умолчанию http://support.microsoft.com/kb/140365

...