Bất kỳ một chương trình máy tính nào cũng cần dữ liệu để tính toán, xử lý và thực hiện chức năng của chương trình. Những dữ liệu này có thể được nhập xuất từ các thiết bị nhập xuất như bàn phím, chuột, màn hình,…
Khi nhập xuất, dữ liệu di chuyển trong một môi trường gọi là dòng (stream). Ngoài ra, dữ liệu còn có thể được lưu trữ dưới dạng file trên bộ nhớ phụ. Bài này sẽ giúp các bạn hiểu rõ về dòng (stream) và tập tin (file) cũng như cách phân loại tập tin.
1. Dòng (stream) là gì?
Dòng (stream) là môi trường trung gian để truyền nhận dữ liệu giữa chương trình và các thiết bị nhập xuất. Muốn nhận hoặc gửi dữ liệu cho một thiết bị, ta sẽ phải thông qua stream kết nối với thiết bị đó.
Quá trình nhập xuất diễn ra trong các stream (gọi là luồng dữ liệu). Trong stream là dãy các byte. Nếu các byte được gửi từ bàn phím, ổ cứng hoặc một kết nối mạng,… đến bộ nhớ chính, được gọi là input. Nếu các byte được gửi từ bộ nhớ chính đến màn hình hiển thị, máy in, ổ cứng hoặc một kết nối mạng,… được gọi là output.
Phân loại stream
Stream văn bản (text)
Stream này chỉ chứa các ký tự. Được tổ chức thành từng dòng, mỗi dòng tối đa 255 ký tự, kết thúc bởi ký tự sang dòng mới là ‘\n’.
Stream nhị phân (binary)
Stream này chứa các byte. Phải được đọc và ghi chính xác từng byte. Stream này có thể xử lý dữ liệu bất kỳ, kể cả dữ liệu văn bản. Được sử dụng chủ yếu với các tập tin (file) trên bộ nhớ.
Ngôn ngữ C++ có hỗ trợ các lệnh nhập xuất cơ bản để truyền nhận dữ liệu với các thiết bị. Xem lại bài Các lệnh gán và nhập xuất cơ bản trong C++ để biết cách sử dụng các lệnh này.
2. Tập tin (file) là gì?
Khi chạy chương trình, dữ liệu sẽ được lưu trữ trên RAM. Khi thoát chương trình thì tất cả dữ liệu đều bị mất. Trong nhiều trường hợp, chúng ta cần lưu trữ dữ liệu có dung lượng lớn, có thể được sử dụng nhiều lần và không bị mất đi khi kết thúc chương trình. Có một giải pháp là lưu trữ dữ liệu dưới dạng tập tin (file) trên bộ nhớ phụ.
Tập tin (file) là tập hợp dữ liệu được tổ chức theo một dạng nào đó với một tên xác định. Một file gồm một dãy byte liên tục, được lưu trữ trong ổ cứng, USB,…File cho phép đọc và ghi dữ liệu trong file.
3. Phân loại tập tin
Theo người sử dụng: quan tâm đến nội dung tập tin nên sẽ phân loại theo phần mở rộng: .EXE, .COM, .CPP, .DOC, .PPT,…
Theo người lập trình: tự tạo các stream tường minh để kết nối với tập tin nên sẽ phân loại theo cách sử dụng stream: tập tin kiểu văn bản (ứng với stream văn bản) và tập tin kiểu nhị phân (ứng với stream nhị phân).
Tập tin kiểu văn bản (stream văn bản)
Gồm dãy các dòng kế tiếp nhau, mỗi dòng dài tối đa 255 ký tự. Kết thúc tập tin bằng ký hiệu cuối dòng (EOF: end_of_line). Dòng không phải là một chuỗi vì không được kết thúc bởi ký tự null (‘\0’).
Khi ghi ký tự xuống dòng ‘\n’ thì được chuyển thành cặp ký tự CR (về đầu dòng, mã ASCII 13) và LF (qua dòng, mã ASCII 10). Khi đọc file thì cặp CR-LF được chuyển thành ‘\n’.
Tập tin kiểu nhị phân (stream nhị phân)
Dữ liệu được đọc và ghi một cách chính xác, không có sự chuyển đổi nào cả. Ký tự kết thúc chuỗi ‘\0’ và EOF không có ý nghĩa là cuối chuỗi và cuối dòng mà được xử lý như mọi ký tự khác.
4. Quy tắt đặt tên tập tin và định vị trí tập tin
Tên tập tin
Gồm tên (name).mở rộng(extension)
Tên (name)
- Bắt buộc phải có.
- Hệ điều hành MS-DOS: dài tối đa 8 ký tự.
- Hệ điều hành Windows: dài tối đa 128 ký tự.
- Gồm các ký tự A đến Z, số 0 đến 9, ký tự khác như #, $, %, ~, ^, @, (, ), !, _, khoảng trắng.
Mở rộng (extension)
- Không bắt buộc.
- Thường có 3 ký tự.
- Thường do chương trình ứng dụng tạo tập tin tự đặt.
Ví dụ:
chrome.exe, data.txt, file-van-ban.jpg,…
Định vị tập tin qua đường dẫn
Đường dẫn chỉ đến vị trí của tập tin như “C:\data\list.txt”, chỉ tập tin list.txt nằm trong thư mục data của ổ đĩa C.
Trong chương trình, đường dẫn này được ghi trong chuỗi như sau: “C:\\data\\list.txt”. Dấu ‘\’ biểu thị ký tự điều khiển nên để thể hiện nó ta phải thêm một dấu ‘\’ ở trước. Nhưng nếu chương trình yêu cầu nhập đường dẫn từ bàn phím thì chỉ nhập một dấu ‘\’.