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

Đề tài: [ Solved ]Tại sao lại khác nhau khi chuyển stream?

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

    Question [ Solved ]Tại sao lại khác nhau khi chuyển stream?

    Mình có một chỗ thắc mắc không hiểu nổi.

    Mình code một đoạn để đọc 1 file, lưu vào string, rồi in string đó vào 1 file khác.
    So sánh lại thì thấy file tạo ra có 1 byte lớn hơn file gốc.
    Ban đầu thì suy nghĩ là kí tự kết thúc string (\0); nhưng thực ra lại không phải.
    Và cũng không thể nghĩ ra byte này lấy từ đâu?

    C++ Code:
    1. /*
    2.  * @author bvKim
    3.  * @date 07-Nov-2008
    4.  */
    5.  
    6. /* library import */
    7.  
    8. #include <iostream>
    9. #include <fstream>
    10. #include <string>
    11.  
    12. using namespace std;
    13.  
    14. /* function declare */
    15. void read(ifstream& in, string& out);
    16. void write(ofstream& out, string& content);
    17.  
    18. /* entry point */
    19. int main (void)
    20.  
    21. {
    22.     ifstream ifile("test.txt", ios::binary | ios::in);
    23.     string content("");
    24.     // ifile >> content
    25.     read(ifile, content);
    26.     ifile.close();
    27.     // content >> ofile
    28.     ofstream ofile("out.txt", ios::binary | ios::out);
    29.     write(ofile, content);    
    30.     ofile.close();
    31.     // stop screen
    32.     system("pause");
    33.     // return
    34.     return 0;  
    35. }
    36.  
    37. /*
    38.  * @method read
    39.  * @return void
    40.  * @param
    41.  *        in ifstream&
    42.  *        out string&
    43.  * @purpose store file info into a string
    44.  */
    45. void read(ifstream& in, string& out) {
    46.     while(in.good()) {
    47.         out.append(1, in.get());
    48.     }      
    49. }
    50.  
    51. /*
    52.  * @method write
    53.  * @return void
    54.  * @param
    55.  *       out ofstream&
    56.  *       content string&
    57.  * @purpose output a string into a file
    58.  */
    59. void write(ofstream& out, string& content) {
    60.      if(out.good()) {
    61.          out << content;
    62.          out << "\0";
    63.      }
    64. }

    còn đây là file : test.txt (27 bytes)
    C++ Code:
    1. this is a test from Dev-C++

    kết quả file: out.txt (28 bytes) tạo từ chương trình trên
    C++ Code:
    1. this is a test from Dev-C++ÿ

    Khác ở byte cuối cùng....sao thế nhỉ

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

    Tôi đã gặp tình huống tương tự như vậy rồi ! Cũng lâu rồi nên quên mất tiêu cách giả quyết thế nào tôi chỉ nhớ sơ sơ là thế này
    bạn thử với một file inTest.txt
    Code:
    this is a test from Dev-C++
    this is a test from Dev-C++
    this is a test from Dev-C++
    this is a test from Dev-C++
    bạn sẽ thấy kết quả đầu ra là
    ouTest.txt
    Code:
    this is a test from Dev-C++
    this is a test from Dev-C++
    this is a test from Dev-C++
    this is a test from Dev-C++ÿÿÿÿ
    Hi vọng sẽ giúp bạn đc cách fix
    linhdkl
    -------------------------------------------------------------------------------------------
    linhdkl at gmail.com
    http://linhdkl.blogspot.com

  3. #3
    Ngày gia nhập
    04 2008
    Bài viết
    336

    Cái đó là mã kết thúc của file nhị phân đó bạn, bạn ghi file txt thì nên làm việc ở chế độ text chứ -.-'
    code ra gió bão

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

    Trích dẫn Nguyên bản được gửi bởi 6220119 Xem bài viết
    Cái đó là mã kết thúc của file nhị phân đó bạn, bạn ghi file txt thì nên làm việc ở chế độ text chứ -.-'
    OK! Cám ơn nhiều. Mình đã hiểu cơ chế xử lý trong MS-DOS/Windows rồi ^^!

    Trong Unix/Linux: ASCII giống Binary
    Còn trong Windows/MS-DOS: sẽ có 1 byte xác định nhị phân. (thực tế nếu in ra toàn mã thì nó sẽ là (0x000000FF 0xFFFFFFFF) <-- đánh dấu

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    bvKim hiểu đúng rồi đó. Một lỗi rất hay thường gặp là copy file( text/binary ) của Window vào Linux.

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

  1. Sự khác nhau giữa FileStream và Stream trong lập trình C#
    Gửi bởi dieucay555 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 16-01-2018, 01:09 PM
  2. Kỹ thuật C luồng(stream) và buffer(bộ đệm) khác nhau như thế nào???
    Gửi bởi SolitaryWolf trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 16-09-2012, 09:05 PM
  3. Lý thuyết giải thuật sự khác nhau cơ bản giữa stream va tập tin trong ngôn ngữ c
    Gửi bởi dungc13 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 1
    Bài viết cuối: 15-09-2012, 10:40 AM
  4. [ Solved ]Tạo số ngẫu nhiên không trùng nhau
    Gửi bởi jacking_nguyen1 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 31
    Bài viết cuối: 23-09-2008, 06:41 PM
  5. [ Solved ]Sự khác nhau giữa get() và getline()
    Gửi bởi the-misery trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 19-08-2008, 02:58 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