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

Đề tài: Khắc Phục sự cố ghi File Kiểu nhị phân và kiểu văn bản

  1. #1
    Ngày gia nhập
    01 2009
    Bài viết
    201

    Wink Khắc Phục sự cố ghi File Kiểu nhị phân và kiểu văn bản

    Nếu mình dùng kiểu nhị phân để ghi sẽ bị dôi ra 1 byte linh tinh( thừa ra),mình đoán nó,còn nếu dùng kiểu văn bản thì nó hoàn toàn đúng,vì sao nó lại sảy ra như vậy và cách khắc phục,thêm nữa là nếu Mở với File exe chẳng hạn,liệu nó có bị tăng byte lên như vậy không
    Code:
    #include<iostream>
    #include<fstream>
     using namespace std;
     int main()
     {
        fstream Fileout,Filein;
        Filein.open("C:\\csb.log",ios::in|ios::binary);
        Fileout.open("C:\\nhiphan.txt",ios::out|ios::binary);
        char ch;
        while(!Filein.eof())
        {
            Filein.get(ch);
            Fileout.put(ch);
        }
        Filein.close();
        Fileout.close();
     }
    Code:
    #include<iostream>
    #include<fstream>
     using namespace std;
     int main()
     {
        fstream Fileout,Filein;
        Filein.open("C:\\csb.log",ios::in);
        Fileout.open("C:\\vanban.txt",ios::out);
        char ch;
        while(!Filein.eof())
        {
            Filein.get(ch);
            Fileout.put(ch);
        }
        Filein.close();
        Fileout.close();
     }
    Đã được chỉnh sửa lần cuối bởi AdminPro : 15-02-2009 lúc 09:41 AM.

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

    Mấy bài copy file kiểu này bên box C++ đã có bài post, cậu cần sử dụng gcount() để xem chính xác mình đã đọc được bao nhiêu byte sau đó mới ghi xuống file. Nên sử dụng read và write thay cho get và put.
    What you see is never what you get...

  3. #3
    Ngày gia nhập
    01 2009
    Bài viết
    201

    Trích dẫn Nguyên bản được gửi bởi void main () Xem bài viết
    Mấy bài copy file kiểu này bên box C++ đã có bài post, cậu cần sử dụng gcount() để xem chính xác mình đã đọc được bao nhiêu byte sau đó mới ghi xuống file. Nên sử dụng read và write thay cho get và put.
    Sử dụng hàm read và write nhỡ đâu gặp trường hợp đọc File nhị phân gặp ký tự NULL thì nó ghi ra thiếu File ngay ( ký tự NULL nằm trong File exe chẳng hạn )
    VD như ở đây nè http://forums.congdongcviet.com/showthread.php?t=14051
    Đã được chỉnh sửa lần cuối bởi Tab : 15-02-2009 lúc 11:44 AM.

  4. #4
    Ngày gia nhập
    01 2009
    Bài viết
    201

    http://forums.congdongcviet.com/showthread.php?t=11450

    Mình đã tìm được nguyên nhân rồi,nhưng cho mình hỏi là nếu cứ tiếp tục đọc ghi bằng File nhị phân thì mỗi lần ghi nó ra bằng write hoặc bằng put thì nó lại dôi ra 1 Byte Kết thúc nhị phân( kể cả File văn bản lẫn File exe,DLL...) vậy khắc phục thế nào bây h,theo mình thấy nhiều phần mềm nó làm ghi File nhưng không bị dôi Byte ra đâu nhé,mình làm thế nào để khắc phục ???
    Đã được chỉnh sửa lần cuối bởi AdminPro : 15-02-2009 lúc 08:00 AM.

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

    Trích dẫn Nguyên bản được gửi bởi AdminPro Xem bài viết
    Sử dụng hàm read và write nhỡ đâu gặp trường hợp đọc File nhị phân gặp ký tự NULL thì nó ghi ra thiếu File ngay ( ký tự NULL nằm trong File exe chẳng hạn )
    VD như ở đây nè http://forums.congdongcviet.com/showthread.php?t=14051
    Cậu không hiểu tớ nói gì cả, cậu hiểu thế nào là binary file, thế nào là text file ? Bản chất của việc copy file là gì ?
    What you see is never what you get...

  6. #6
    Ngày gia nhập
    01 2009
    Bài viết
    201

    Mặc định Khắc Phục sự cố ghi File Kiểu nhị phân và kiểu văn bản

    Code:
    #include<iostream.h>
    #include<string.h>
    #include<fstream.h>
    #include<windows.h>
    int main()
    {
        fstream File;
        char ch,A[100000];
        HANDLE hFile = CreateFile("C:\\WINDOWS\\NOTEPAD.exe",
    		GENERIC_READ,
    		FILE_SHARE_READ,
    		NULL,
    		OPEN_ALWAYS,
    		FILE_ATTRIBUTE_NORMAL,
            NULL);
        DWORD Filesize = GetFileSize(hFile,NULL);
        File.open("C:\\WINDOWS\\NOTEPAD.exe",ios::in|ios::binary);
        File.read(A,Filesize);
        fstream Fileout;
        Fileout.open("C:\\12.exe",ios::out|ios::binary);
        Fileout.write(A,Filesize);
        return 0;
    }
    OK đúng rồi

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

    Vậy thì code đầu tiên của cậu sai cái gì, cậu debug ra chưa ? Phải tìm ra lý do tại sao sai chứ ?

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

  1. Cho Thuê Văn Phòng Đường Phùng Khắc Khoan Quận 1
    Gửi bởi phatlocreal0 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 01-09-2013, 08:25 PM
  2. Căn hộ văn khê, dự án văn khê, chiết khấu cao, không đâu rẻ bằng
    Gửi bởi ephat_tt86 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 07-12-2011, 02:10 PM
  3. Căn hộ văn khê, dự án văn khê, chiết khấu cao, không đâu rẻ bằng
    Gửi bởi ephat_tt86 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 07-12-2011, 01:53 PM
  4. làm sao để đọc văn bản từ file .txt trong c++ sang một file tạo bằng thư viện include <map>
    Gửi bởi biencute trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 23-06-2011, 04:12 PM
  5. đọc và lưu file có mật khẩu trên C# như thế nào?
    Gửi bởi nhuibaby trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 29-07-2010, 10:43 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