C++ cung cấp thư viện
Viết tệp nhị phân bằng C++
Để lưu dữ liệu vào tệp nhị phân bằng C++, phương thức write() được sử dụng. Hàm này ghi một số byte được chỉ định vào luồng được chỉ định, bắt đầu từ vị trí của con trỏ “put”. Nếu con trỏ “put” ở cuối thì file sẽ được mở rộng. Tuy nhiên, dữ liệu mới sẽ ghi đè các ký tự hiện có nếu con trỏ nằm trong tệp. Trong trường hợp xảy ra lỗi trong quá trình ghi, luồng sẽ được đánh dấu là đang ở trạng thái lỗi. Bây giờ, chúng ta hãy chuyển sang các ví dụ để tìm hiểu cách ghi vào tệp nhị phân bằng cách sử dụng một số hàm C++ đơn giản và được tích hợp sẵn.
Phương pháp 1: Viết tệp nhị phân với dữ liệu có cấu trúc
Bạn có thể cần phải ghi dữ liệu có cấu trúc, chẳng hạn như cấu trúc tùy chỉnh, vào tệp nhị phân trong nhiều trường hợp. Hãy xem xét một ví dụ chứa bản ghi về một người bao gồm tên, chiều cao và tuổi của một người. Xem đoạn mã đã cho sau đây và xem phần giải thích:
#include
#include
cấu trúc Người {
ký tự tên [ năm mươi ] ;
int tuổi ;
gấp đôi chiều cao ;
} ;
int chủ yếu ( ) {
tiêu chuẩn :: ngoài dòng outFile ( 'người.bin' , tiêu chuẩn :: ios :: nhị phân ) ;
nếu như ( ! outFile. đang_mở ( ) ) {
tiêu chuẩn :: cer << 'Lỗi! Không thể mở tập tin để viết!' << tiêu chuẩn :: kết thúc ;
trở lại 1 ;
}
người người1 = { 'Kalsoom Ilyas' , 25 , 1,75 } ;
người người2 = { 'Kalsoom Bajwa' , 30 , 1,68 } ;
outFile. viết ( diễn giải lại_cast < ký tự *> ( & người 1 ) , kích thước của ( người 1 ) ) ;
outFile. viết ( diễn giải lại_cast < ký tự *> ( & người2 ) , kích thước của ( người2 ) ) ;
outFile. đóng ( ) ;
tiêu chuẩn :: cout << 'Hồ sơ của người đó được ghi vào tệp nhị phân thành công.' << tiêu chuẩn :: kết thúc ;
trở lại 0 ;
}
Đây là bản phân tích mã với các chi tiết cụ thể. Chương trình bắt đầu bằng việc xác định cấu trúc tùy chỉnh có tên “Người”. Nó có ba trường: tên, tuổi và chiều cao. Thông tin chi tiết về các trường này như sau:
- tên: Một chuỗi để lưu trữ tên người (tối đa 50 ký tự)
- tuổi: Một số nguyên để lưu trữ tuổi của người đó
- chiều cao: Một đôi để lưu trữ chiều cao của người
Sau khi xác định cấu trúc “Người”, hàm chính bắt đầu là điểm vào của chương trình. Dòng đầu tiên trong chương trình chính sẽ mở một tệp có tên “people.bin”. Chúng tôi sử dụng “std::ofstream” để tạo một tệp có tên “people.bin” để ghi dữ liệu ở định dạng nhị phân. Việc kiểm tra xem file có mở thành công hay không là rất quan trọng. Nếu không, thông báo lỗi sẽ hiển thị và chương trình sẽ dừng. Do đó, với sự trợ giúp của điều kiện “if” và hàm is_open(), chúng ta kiểm tra xem tệp đã mở thành công hay chưa.
Ở đây, hai đối tượng “Person” được tạo. Chúng tôi xác định hai biến, “person1” và “person2”, thuộc loại “Person”. Chúng tôi chỉ định các giá trị tên biến, tuổi và chiều cao cho “Kalsoom Ilyas” và “Kalsoom Bajwa”.
Bây giờ chúng ta có dữ liệu để ghi vào tệp nhị phân, hãy thực hiện hàm thực tế với hàm write(). Chúng tôi sử dụng “outFile.write” để ghi nội dung của từng đối tượng “Person” vào tệp. “reinterpret_cast
Sau khi ghi dữ liệu vào tệp, điều quan trọng là phải đóng nó đúng cách để không có dữ liệu nào bị mất do bất kỳ chức năng nào khác. Chúng tôi sử dụng outFile.close() để giải phóng các tài nguyên được liên kết với tệp và đảm bảo rằng dữ liệu được ghi chính xác. Cuối cùng, chúng tôi in một thông báo xác nhận việc ghi dữ liệu thành công vào tệp nhị phân.
Nếu chúng ta giải thích ví dụ này bằng những thuật ngữ đơn giản hơn, hãy tưởng tượng một cuốn sổ đặc biệt chỉ có thể lưu trữ thông tin về mọi người bằng ngôn ngữ bí mật. Mã này tạo ra một kế hoạch chi tiết để sắp xếp thông tin (tên, tuổi, chiều cao). Nó mở cuốn sổ, điền hồ sơ cho hai người, dịch thông tin sang ngôn ngữ bí mật và viết gọn gàng vào bên trong. Sau đó, nó sẽ đóng sổ ghi chép một cách an toàn, bảo quản các cấu hình để sử dụng trong tương lai. Tham khảo đầu ra của chương trình được đưa ra trong ảnh chụp nhanh sau:
Phương pháp 2: Ghi số nguyên vào tệp nhị phân
Trong phương thức này, một mảng các số nguyên được ghi vào một tệp nhị phân có tên là “integers.bin”. “reinterpret_cast
#include
int chủ yếu ( ) {
tiêu chuẩn :: ngoài dòng outFile ( 'số nguyên.bin' , tiêu chuẩn :: ios :: nhị phân ) ;
nếu như ( ! outFile. đang_mở ( ) ) {
tiêu chuẩn :: cer << 'Lỗi! Không thể mở tập tin để viết!' << tiêu chuẩn :: kết thúc ;
trở lại 1 ;
}
int con số [ ] = { 42 , 99 , - 1 , 0 } ;
outFile. viết ( diễn giải lại_cast < ký tự *> ( con số ) , kích thước của ( con số ) ) ;
outFile. đóng ( ) ;
tiêu chuẩn :: cout << 'Các số nguyên đã cho được ghi vào tệp nhị phân thành công.' << tiêu chuẩn :: kết thúc ;
trở lại 0 ;
}
Đây là bản phân tích mã với các chi tiết cụ thể:
“#include
Dòng tiếp theo là “int số[] = {42, 99, -1, 0};” định nghĩa một mảng có tên là “numbers” với các số nguyên 42, 99, -1 và 0. “outFile.write(reinterpret_cast
Phần kết luận
Viết tệp nhị phân bằng C++ là một kỹ năng quan trọng để xử lý hiệu quả các loại dữ liệu khác nhau. Trong quá trình khám phá cách ghi tệp nhị phân trong C++ này, chúng ta đã tìm hiểu cách sử dụng lớp “ofstream” để xử lý dữ liệu nhị phân một cách hiệu quả. Cho dù xử lý các số nguyên đơn giản hay dữ liệu có cấu trúc bằng cách sử dụng cấu trúc tùy chỉnh, quy trình này đều bao gồm việc mở luồng tệp, ghi dữ liệu ở định dạng nhị phân rồi đóng tệp. Khả năng này cung cấp cho các nhà phát triển C++ sự linh hoạt để làm việc với nhiều loại dữ liệu nhị phân đa dạng, góp phần tạo nên tính linh hoạt của ngôn ngữ trong các ứng dụng từ lập trình cấp hệ thống đến xử lý đa phương tiện.