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

307

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

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

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

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

JL.
источник
Связано, но для VB.NET: определение размера файла в VB.NET ,
Питер Мортенсен,

Ответы:

324

FileInfo.Length вернет длину файла в байтах (не размер на диске), так что это то, что вы ищете, я думаю.

Марчин Дептула
источник
4
Также: social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/… Это обсуждение о том, как получить «другое значение», то есть размер на диске.
Марчин Дептула
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 есть хорошая страница, посвященная распространенным задачам ввода / вывода.

Ясон
источник
11

MSDN FileInfo.Length говорит, что это «размер текущего файла в байтах».

Мой типичный поиск Google для чего-то вроде этого: msdn FileInfo

Остин Салонен
источник
7

Возвращает длину содержимого файла

Томас Левеск
источник
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
С. Феррелл
источник