Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Cách đọc ghi file nhị phân trong MFC

  1. #1
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Mặc định Cách đọc ghi file nhị phân trong MFC

    Cho em hỏi cách đọc ghi file nhị phân trong MFC , ví dụ em muốn ghi một số nguyên xuống file thì làm thế nào ? Muốn đọc số đó lên thì làm thế nào ?
    Giả sử em ghi một dãy các số nguyên 1, 2, 3, 4, 5. xuống file nhị phân chẳng hạn . Làm thế nào để em đọc từng số đó lên mà không bị đọc nhầm thành số 12345 ?

    Lưu ý: Không đặt câu hỏi chen ngang các bài hướng dẫn mà chỉ có thể bổ sung cho hoàn thiện các bài hướng dẫn. Bài viết của cậu đã được di chuyển. Nếu còn tiếp tục, bài viết sẽ bị xóa hoàn toàn. (Posted by Dreaminess)

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hà nội
    Bài viết
    204

    Hic, làm sao mà đọc nhầm ra 12345 được, nếu bạn đã có file nhị phân với các số nguyên 1,2,3,4,5 thì 2 byte đầu của file là số 1, 2 byte tiếp theo của file là số 2... Khi bạn đọc ra thì đọc lần lượt 2 byte một, mỗi lần đọc ghi ra 1 biến số nguyên.
    @admin: post bài ko cho vào thẻ code, với lại các hàm đọc ghi đấy thường dùng cho dos, còn lập trình cho win thì dùng API cho nó "đúng bài" !
    Life:\> dir

  3. #3
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    mấy hàm trên đều là wrapper của WinAPI đấy bạn à, không có cái nào là cho Dos với không cho Dos cả, được cái là những hàm trên còn chạy được cả ở Linux

    Khuyên các bạn là nên dùng stream, vừa dễ, C++, dịch được trên nhiều môi trường
    Đã được chỉnh sửa lần cuối bởi nguyentuan2 : 30-10-2007 lúc 10:41 PM.

  4. #4
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Mình có đoạn code này , định đọc các số nguyên từ file nhị phân in.in và ghi vào file thành text , nhưng kết quả ko như mong muốn :

    Visual C++ Code:
    1.     CFile fin;
    2.     CStdioFile fout;
    3.    
    4.     UINT nFlags ;
    5.     CFileException fe;
    6.  
    7.     nFlags = CFile::modeRead | CFile::typeBinary ;
    8.  
    9.     if(!fin.Open("in.in",nFlags,&fe))
    10.     {
    11.         fe.ReportError();
    12.         return;
    13.     }
    14.    
    15.     nFlags = CFile::modeWrite | CFile::modeCreate ;
    16.     if(!fout.Open("out.out",nFlags,&fe))
    17.     {
    18.         fe.ReportError();
    19.         return;
    20.     }
    21.  
    22.     int a ;
    23.     CString b;
    24.     while (fin.Read(&a,sizeof(a)))
    25.     {
    26.         b.Format("%d",a);
    27.         fout.WriteString(b);
    28.     }
    29.     fin.Close();
    30.     fout.Close();
    Không biết việc đọc môt file nhị phân trong MFC như thế đã đúng chưa , ai biết xin chỉ giúp .

  5. #5
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Code này chạy đúng, không biết ý của cậu là không mong muốn ở chổ nào ?

  6. #6
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Mặc định Cách đọc ghi file nhị phân trong MFC

    Mình có file in.obj này là file nhị phân , được biên dịch bởi trình biên dịch LC 3 Editor. Vấn đề là nó ghi xuống file obj này một số nguyên int = 1 . vậy mà với đoạn code trên mình ko đọc được đúng .
    File here :http://www.box.net/shared/byl70l0gpt
    Tiện đây xin hỏi luôn , có bạn đang học về LC 3 ko ?
    Đã được chỉnh sửa lần cuối bởi Tab : 31-10-2007 lúc 12:20 AM. Lý do: Chữa lại link bị hỏng

  7. #7
    Ngày gia nhập
    09 2006
    Bài viết
    711

    File binary của cậu sai. Cậu tìm và dùng 1 trình HexEditor (HexWorkshop, WinHex, UltraEdit, Hiew...) mở file .dat của cậu ra, cậu sẽ thấy.
    Trên Win32, số int có size = 4 byte, trong khi file của cậu chỉ có hai byte, trong HexEditor, display thành 00 01, và số này cũng không phải là 1, mà là 100 hex = 256 decimal.
    Size of int trên DOS = 2 byte, có thể cậu write = DOS app, read = Win32 app phải không ?
    Trên Win32 app, sizeof(a) = 4, nên ct của cậu sẽ đọc 4 byte vào vùng nhớ của a, nhưng do file của cậu chỉ có 2 byte, nên ct chỉ đọc được 2 byte thấp (LOWORD), còn 2 byte cao của a (HIWORD) sẽ có giá trị rác. Trên máy tui đang debug, VC++6, giá trị rác này là 0xCCCC, nên sẽ đọc ra a = 0xCCCC0100 (=-859045632 decimal).

  8. #8
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Em cũng chưa rõ cơ chế của LC 3 Editor nó ghi bằng kiểu dos hay win nữa (Nó là một trương trình chạy trên Win 32). Có thể anh nói đúng , nó ghi xuống kiểu 2 byte , trong khi em lại đọc 4 byte .Vậy có cách nào trên Win 32 App đọc và ghi xuống các số nguyên kiểu 2 byte (DOS) không anh ?

  9. #9
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Thì đổi lại, int a thành short a, code vẫn giữ nguyên.

  10. #10
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Cảm ơn anh , em ghi được rồi.

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