Как вы получаете размер файла в C #?


307

Мне нужен способ получить размер файла с помощью C #, а не размер на диске. Как это возможно?

В настоящее время у меня есть этот цикл

foreach (FileInfo file in downloadedMessageInfo.GetFiles())
{
    //file.Length (will this work)
}

Вернет ли это размер или размер на диске?


Ответы:



386

Если вы уже указали путь к файлу, это код, который вам нужен:

long length = new System.IO.FileInfo(path).Length;

1
Окружите его блоком try / catch и проверьте все возможные исключения, как описано здесь : SecurityException, UnauthorizedAccessException, PathTooLongException, NotSupportedException и - в зависимости от вашего варианта использования - ArgumentNullException и ArgumentException
huha

37

FileInfo.Lengthсделает свое дело (для MSDN это "[g] определяет размер в байтах текущего файла.") На MSDN есть хорошая страница, посвященная распространенным задачам ввода / вывода.




4

Размер на диске может быть другим, если вы переместите файл в другую файловую систему (FAT16, NTFS, EXT3 и т. Д.)

Как сказали другие авторы, это даст вам размер в байтах, а не размер на диске.


0

Свойство Length класса FileInfo возвращает размер файла (а не размер на диске). Если вы хотите отформатированный размер файла (т.е. 15 КБ), а не длинное байтовое значение, вы можете использовать CSharpLib , пакет, который я создал, который добавляет больше функциональности к классу FileInfo. Вот пример:

using CSharpLib;
FileInfo info = new FileInfo("sample.txt");
Console.WriteLine(info.FormatBytes());  // Output: 15 MB
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.