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

Đề tài: nén file huffman trên codeproject

  1. #1
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    Mặc định nén file huffman trên codeproject

    Visual C++ Code:
    1. // huffman.cpp : Defines the entry point for the console application.
    2. //
    3.  
    4. #include "stdafx.h"
    5. #include "lib\huffman.h"
    6.  
    7.  
    8. int get_file_size(FILE *fp);
    9.  
    10. int _tmain(int argc, _TCHAR* argv[])
    11. {
    12.     FILE *source_file, *dest_file;
    13.         unsigned char *sour, *dest;
    14.         int usize, csize;
    15.  
    16.         if (argc != 4) {
    17.                 wprintf(L" bad arguments.\n");
    18.                 wprintf(L"  huffman.exe e sourfile destfile\n");
    19.                 wprintf(L"  huffman.exe d sourfile destfile\n");
    20.                 exit(1);
    21.         } else if ((source_file = _wfopen(argv[2], L"rb")) == NULL) {
    22.                 wprintf(L"bad file %s.\n", argv[2]);
    23.                 exit(1);
    24.         } else if ((dest_file = _wfopen(argv[3], L"wb")) == NULL) {
    25.                 wprintf(L"bad file %s.\n", argv[3]);
    26.                 exit(1);
    27.         } else {
    28.                                
    29.                 Huffman huffman;
    30.  
    31.                 if (!wcscmp(argv[1], L"e"))
    32.                 {                        
    33.                         usize = get_file_size(source_file);
    34.                        
    35.                         sour = new unsigned char[usize];
    36.                         dest = new unsigned char[usize];
    37.                         usize = (int)fread(sour, 1, usize, source_file);
    38.  
    39.                         huffman.encode(dest, csize, sour, usize);
    40.  
    41.                         fwrite(dest, 1, csize, dest_file);
    42.                         wprintf(L" cmpression ration: %.2f\n", (float)usize / (float)csize);
    43.                 }
    44.                 else if (!wcscmp(argv[1], L"d"))
    45.                 {                        
    46.                         csize = get_file_size(source_file);
    47.  
    48.                         sour = new unsigned char[csize];
    49.                         csize = fread(sour, 1, csize, source_file);
    50.  
    51.                         dest = new unsigned char[huffman.get_uncompressed_size(sour)];
    52.  
    53.                         huffman.decode(dest, usize, sour);                                        
    54.  
    55.                         fwrite(dest, 1, usize, dest_file);
    56.                 }
    57.                 else
    58.                 {
    59.                         wprintf(L"bad argument %s.\n", argv[4]);
    60.                         exit(1);
    61.                 }                
    62.  
    63.                 fclose(source_file);
    64.                 fclose(dest_file);
    65.         }        
    66.  
    67.         return 0;
    68. }
    69.  
    70. int get_file_size(FILE *fp)
    71. {
    72.         fseek(fp, 0, SEEK_END);
    73.         int size = ftell(fp);
    74.         fseek(fp, 0, SEEK_SET);
    75.         return size;
    76. }

    được dịch trên VC++2008
    ai biết là nó nén cái gì không nhỉ

    híc mong mọi người phân tích dùm mình là nó sẽ nén cái gì không nhỉ,mình không rõ câu lệnh này
    Code:
    if (argc != 4) {
                    wprintf(L" bad arguments.\n");
                    wprintf(L"  huffman.exe e sourfile destfile\n");
                    wprintf(L"  huffman.exe d sourfile destfile\n");
                    exit(1);
            }
    argv là gì vây nhỉ,mình đoán nó là đường dẫn chính file đang được chạy,nhưng mình không hiểu nếu nén chính file đang chạy sao được nhỉ,lạ quá
    Code:
    else if (!wcscmp(argv[1], L"d")) 
                    {                        
                            csize = get_file_size(source_file);
    
                            sour = new unsigned char[csize];
                            csize = fread(sour, 1, csize, source_file);
    
                            dest = new unsigned char[huffman.get_uncompressed_size(sour)];
    
                            huffman.decode(dest, usize, sour);                                        
    
                            fwrite(dest, 1, usize, dest_file);
                    }

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    38

    argv là mảng tham số truyền cho chương trình thôi, chi tiết bạn xem trong tài liệu C/C++.
    Ví dụ: bạn gõ dòng lệnh sau ở dấu nhắc để nén file test.exe thành file test.huf:
    huffman.exe e test.exe test.huf
    argc = 4 // số lượng tham số truyền cho ct = 4
    argv[0] = "huffman.exe" // đường dẫn đến file của ct
    argv[1] = "e" // e : encoding = nén, d : de-encoding = giải nén
    argv[2] = "test.exe" // file nguồn để nén
    argv[3] = "test.huf" // file đích, chứa dữ liệu đã được nén
    Đã được chỉnh sửa lần cuối bởi kirimaru80 : 18-11-2008 lúc 09:05 AM.

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

  1. Nén dữ liệu, nén File bằng thuật toán Huffman viết bằng C++
    Gửi bởi AlexF trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 33
    Bài viết cuối: 16-03-2016, 05:11 PM
  2. Xin nick trên codeproject.com
    Gửi bởi beoheo91 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 19-03-2012, 06:08 PM
  3. Chương trình nén file theo mã Huffman. Giúp em với.
    Gửi bởi trinhthinet trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 05-03-2011, 04:17 PM
  4. chương trình nén file áp dụng thuật toán huffman
    Gửi bởi vinhson trong diễn đàn Dự án & Source code C#, ASP.NET
    Trả lời: 12
    Bài viết cuối: 06-11-2010, 07:38 PM
  5. Hướng dẫn sơ qua về thuật toán nén file Huffman
    Gửi bởi Cpro trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 02-12-2008, 06:25 AM

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