Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Tính kích thước của file trong C bằng những cách nào?

  1. #1
    Ngày gia nhập
    12 2011
    Bài viết
    3

    Mặc định Tính kích thước của file trong C bằng những cách nào?

    Em đang học về file trong C, dự định thử viết một chương trình chia và ghép nối file. Vấn đề đầu tiên em gặp phải là viết hàm tình toán dung lượng của file. Dưới đây là 2 hàm mà em đã viết
    Hàm thứ nhất đơn giản, chính xác nhưng chỉ làm việc với file dưới 2 GB, do kiểu của ftelllong
    C Code:
    1. unsigned fsize(FILE *f)
    2. {
    3.     unsigned size;
    4.     fseek(f, 0, SEEK_END);
    5.     size = (unsigned)ftell(f);
    6.     rewind(f);
    7.     return (size);
    8. }
    Hàm thứ 2 em nghĩ là chắc chắn hơn, nhưng không hiểu sao sô byte tình ra không bằng thực tế, ngay cả với những file nhỏ chỉ vài trăm byte.
    C Code:
    1. double fsize(FILE *f)
    2. {
    3.     double count = 0;
    4.     rewind(f);
    5.     do{
    6.     fgetc(f);
    7.     count++;
    8.     }while(!feof(f));
    9.     rewind(f);
    10.     return (count);
    11. }
    Mong mọi người góp ý giúp em.
    May be I'm crazy. But I won't stop.

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình thấy code tính đúng mà bạn, ko có sai byte nào hết.

    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Size on DiskSize of File là khác nhau đấy. Size on Disk phụ thuộc vào Format của ổ đĩa, còn Size of File mới là kích thước của file

    Chưa kiểm tra lại nhưng Kevin thấy làm theo cách 1 tốt và nhanh hơn cách thứ 2. Kevin nghĩ rằng, bạn không nên chế lại bánh xe khi mà bánh xe cũ đã quá tròn, thay vì chế lại hãy làm cho nó có khả năng chạy nhanh và tốt hơn.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  4. #4
    Ngày gia nhập
    12 2011
    Bài viết
    3

    Hàm thứ nhất tính đúng nhưng bị giới hạn bởi 2GB như em đã trình bày, nhưng em chưa nghĩ ra cách để nâng giới hạn lên. Vì vấn đề nằm ở hàm ftell (trả về kiểu long).
    Hàm thứ 2 thì em đã nhận ra vấn đề không nằm ở hàm mà do trong lúc mở file, em mở ở kiểu văn bản nên không đọc được hết file. Ngoài ra khi thử với file lớn thì rất chậm. Dù sao với bài tập về nhà thì 2GB có lẽ cũng chấp nhận được rồi. Cảm ơn 2 anh đã cho ý kiến.
    May be I'm crazy. But I won't stop.

  5. #5
    Ngày gia nhập
    11 2010
    Bài viết
    589

    Nếu làm trên hệ thống tương thích với POSIX thì có thể dùng hàm stat để lấy thông tin về file, trong đó có kích thước. Có thể xử lý file với kích thước cỡ 2^63-1 byte.

Các đề tài tương tự

  1. Trả lời: 3
    Bài viết cuối: 10-04-2013, 08:06 AM
  2. Giới thiệu cách chuyển File Ảnh thành file Video trong download proshow gold
    Gửi bởi thuhu0900x trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 3
    Bài viết cuối: 03-07-2012, 03:54 AM
  3. Đọc dữ liệu file midi dạng số HEX và lấy lời nhạc trong file ra file text
    Gửi bởi kimngockhtn_2007 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 29-06-2011, 04:40 PM
  4. File server để dùng ajax trong visual2010 là file gì, xử lý kết nối với SQLserver như thế nào?
    Gửi bởi lenamshenlong trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 9
    Bài viết cuối: 26-05-2011, 05:14 PM
  5. Làm sao để open file bằng cách double click vào file trong windows explorer?
    Gửi bởi Batchuoc_09 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 18-07-2010, 01:12 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn