คุณจะได้ขนาดไฟล์ใน C # ได้อย่างไร?


307

ฉันต้องการวิธีรับขนาดของไฟล์โดยใช้ C # ไม่ใช่ขนาดของดิสก์ เป็นไปได้อย่างไร?

ขณะนี้ฉันมีวงนี้

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

สิ่งนี้จะคืนขนาดหรือขนาดของดิสก์หรือไม่?


ที่เกี่ยวข้อง แต่สำหรับ VB.NET: กำหนดขนาดของไฟล์ใน VB.NET ,
ปีเตอร์มอร์เทน

คำตอบ:


324

FileInfo.Length จะคืนค่าความยาวของไฟล์เป็นไบต์ (ไม่ใช่ขนาดบนดิสก์) ดังนั้นนี่คือสิ่งที่คุณต้องการ


4
นอกจากนี้: social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/ ......นี่คือการสนทนาเกี่ยวกับวิธีรับ "ค่าอื่น" ซึ่งมีขนาดบนดิสก์
Marcin Deptuła

386

หากคุณมีเส้นทางของไฟล์เป็นอินพุตนี่เป็นรหัสที่คุณต้องการ:

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

1
ล้อมรอบด้วย try / catch block และตรวจสอบข้อยกเว้นที่เป็นไปได้ทั้งหมดตามที่อธิบายไว้ที่นี่ : SecurityException, UnauthorizedAccessException, PathTooLongException, NotSupportedException และ - ขึ้นอยู่กับกรณีการใช้งานของคุณ - ArgumentNullException และ ArgumentException
huha


11

MSDN FileInfo.Lengthบอกว่ามันเป็น "ขนาดของไฟล์ปัจจุบันเป็นไบต์"

การค้นหาโดยทั่วไปของ Google ของฉันสำหรับสิ่งนี้คือ: msdn FileInfo



4

ขนาดของดิสก์อาจแตกต่างกันถ้าคุณย้ายไฟล์ไปยังระบบไฟล์อื่น (FAT16, NTFS, EXT3 ฯลฯ )

ดังที่ผู้ตอบคนอื่น ๆ ได้กล่าวมาสิ่งนี้จะทำให้คุณมีขนาดเป็นไบต์ไม่ใช่ขนาดของดิสก์


0

คุณสมบัติความยาวของคลาส FileInfo ส่งคืนขนาดของไฟล์ (ไม่ใช่ขนาดบนดิสก์) หากคุณต้องการขนาดไฟล์ที่จัดรูปแบบ (เช่น 15 KB) แทนที่จะเป็นค่าไบต์แบบยาวคุณสามารถใช้CSharpLib ได้แพคเกจที่ฉันทำซึ่งเพิ่มฟังก์ชั่นเพิ่มเติมให้กับคลาส FileInfo นี่คือตัวอย่าง:

using CSharpLib;
FileInfo info = new FileInfo("sample.txt");
Console.WriteLine(info.FormatBytes());  // Output: 15 MB
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.