Làm thế nào để bạn có được kích thước tập tin trong C #?


307

Tôi cần một cách để có được kích thước của tệp bằng C # chứ không phải kích thước trên đĩa. Sao có thể như thế được?

Hiện tại tôi có vòng lặp này

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

Điều này sẽ trả lại kích thước hoặc kích thước trên đĩa?


Liên quan, nhưng đối với VB.NET: Xác định kích thước tệp trong VB.NET ,
Peter Mortensen

Câu trả lời:



386

Nếu bạn đã có đường dẫn tệp làm đầu vào, đây là mã bạn cần:

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

1
Bao quanh nó với khối thử / bắt và kiểm tra tất cả các trường hợp ngoại lệ có thể được mô tả ở đây : SecurityException, UnlegAccessException, PathTooLongException, NotSupportedException và - phụ thuộc vào trường hợp sử dụng của bạn - ArgumentNullException và ArgumentException
huha

37

FileInfo.Lengthsẽ thực hiện thủ thuật (trên mỗi MSDN, "[g] có kích thước, tính bằng byte, của tệp hiện tại.") Có một trang đẹp trên MSDN về các tác vụ I / O phổ biến.


11

MSDN FileInfo.Ldrops nói rằng đó là "kích thước của tệp hiện tại tính bằng byte."

Tìm kiếm Google điển hình của tôi cho một cái gì đó như thế này là: msd FileInfo



4

Kích thước trên đĩa có thể khác nhau, nếu bạn di chuyển tệp sang hệ thống tệp khác (FAT16, NTFS, EXT3, v.v.)

Như những người trả lời khác đã nói, điều này sẽ cung cấp cho bạn kích thước tính bằng byte, không phải kích thước trên đĩa.


0

Thuộc tính Độ dài của lớp FileInfo trả về kích thước của tệp (không phải kích thước trên đĩa). Nếu bạn muốn có kích thước tệp được định dạng (ví dụ 15 KB) thay vì giá trị byte dài, bạn có thể sử dụng CSharpLib , một gói tôi đã thực hiện có thêm chức năng cho lớp FileInfo. Đây là một ví dụ:

using CSharpLib;
FileInfo info = new FileInfo("sample.txt");
Console.WriteLine(info.FormatBytes());  // Output: 15 MB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.