Cách đọc và ghi vào tệp trong C ++

How Read Write File C



Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách đọc và ghi vào một tệp bằng ngôn ngữ lập trình C ++ bằng cách sử dụng một số ví dụ. Để hiểu các thao tác trên tệp C ++ như đọc và ghi, trước tiên chúng ta phải hiểu khái niệm luồng trong C ++.

Luồng là gì?

Luồng chỉ đơn giản là một luồng dữ liệu hoặc ký tự. Có hai loại luồng: luồng đầu vào và luồng đầu ra. Luồng đầu vào được sử dụng để đọc dữ liệu từ thiết bị đầu vào bên ngoài như bàn phím, trong khi luồng đầu ra được sử dụng để ghi dữ liệu vào thiết bị đầu ra bên ngoài như màn hình. Một tệp có thể được coi là cả hai nguồn đầu vào và đầu ra.









Trong C ++, chúng tôi sử dụng một luồng để gửi hoặc nhận dữ liệu đến hoặc từ một nguồn bên ngoài.



Chúng ta có thể sử dụng các lớp tích hợp để truy cập luồng đầu vào / đầu ra, tức là ios.





Đây là phân cấp lớp luồng của ngôn ngữ lập trình C ++:



Đối tượng cin và cout được sử dụng để đọc dữ liệu từ bàn phím và hiển thị kết quả đầu ra trên màn hình tương ứng. Ngoài ra, ifstream, viết tắt của luồng tệp đầu vào, được sử dụng để đọc luồng dữ liệu từ tệp và ofstream, viết tắt của luồng tệp đầu ra, được sử dụng để ghi luồng dữ liệu vào tệp.

Tệp iostram.h chứa tất cả các lớp luồng đầu vào / đầu ra tiêu chuẩn được yêu cầu trong ngôn ngữ lập trình C ++.

Các ví dụ

Bây giờ bạn đã hiểu cơ bản về các luồng, chúng ta sẽ thảo luận các ví dụ sau để giúp bạn hiểu rõ hơn về các hoạt động tệp trong C ++:

  • Ví dụ 1: Mở và đóng tệp
  • Ví dụ 2: Ghi vào tệp
  • Ví dụ 3: Đọc từ một tệp
  • Ví dụ 4: Đọc và ghi vào tệp
  • Ví dụ 5: Đọc và ghi vào tệp nhị phân

Ví dụ 1: Mở và đóng tệp

Trong chương trình ví dụ này, chúng tôi sẽ trình bày cách mở / tạo tệp và cách đóng tệp trong C ++. Như bạn có thể thấy trong chương trình dưới đây, chúng tôi đã bao gồm thư viện cần thiết cho các hoạt động tệp.

Để mở và đóng một tệp, chúng ta cần một đối tượng ofstream. Sau đó, để đọc hoặc ghi vào một tệp, chúng ta phải mở tệp đó. Chúng tôi đã bao gồm tệp tiêu đề fstream tại dòng số 1 để chúng tôi có thể truy cập lớp ofstream.

Chúng ta đã khai báo myFile_Handler như một đối tượng của dòng bên trong hàm main. Sau đó, chúng ta có thể sử dụng hàm open () để tạo một tệp trống và hàm close () để đóng tệp.

#bao gồm

sử dụng không gian têngiờ;

NSchủ chốt()
{
ofstream myFile_Handler;

// Mở tập tin
myFile_Handler.mở ra('File_1.txt');

// Đóng tệp
myFile_Handler.gần();
trở lại 0;
}

Bây giờ, chúng ta sẽ biên dịch chương trình và kiểm tra đầu ra. Như bạn có thể thấy trong cửa sổ xuất bên dưới, tệp File_1.txt đã được tạo sau khi thực thi chương trình. Kích thước của tệp bằng 0 vì chúng tôi không ghi bất kỳ nội dung nào trong tệp.

Ví dụ 2: Ghi vào tệp

Trong chương trình ví dụ trước, chúng tôi đã hướng dẫn bạn cách mở tệp và cách đóng tệp. Bây giờ, chúng tôi sẽ chỉ cho bạn cách viết một cái gì đó trong một tệp.

Chúng tôi có thể ghi vào tệp bằng toán tử chèn luồng, tức là<<. In this program, we have used the file handler and insertion operator to write two lines in the file. The insertion operator (<<) indicates that we are inserting the string into the output file stream object.

#bao gồm

sử dụng không gian têngiờ;

NSchủ chốt()
{
ofstream myFile_Handler;
// Mở tập tin
myFile_Handler.mở ra('File_1.txt');

// Ghi vào tệp
myFile_Handler<< 'Đây là một File thử nghiệm mẫu. ' <<endl;
myFile_Handler<< 'Đây là dòng thứ hai của tệp. ' <<endl;

// Đóng tệp
myFile_Handler.gần();
trở lại 0;
}

Bây giờ, chúng ta sẽ biên dịch chương trình trên và thực thi nó. Như bạn có thể thấy bên dưới, chúng tôi đã ghi thành công tệp File_1.txt.

Ví dụ 3: Đọc từ một tệp

Trong các ví dụ trước, chúng tôi đã hướng dẫn bạn cách ghi nội dung vào tệp. Bây giờ, hãy đọc nội dung từ tệp mà chúng tôi đã tạo trong Ví dụ-2 và hiển thị nội dung trên thiết bị đầu ra tiêu chuẩn, tức là màn hình.

Chúng tôi sử dụng hàm getline () để đọc dòng hoàn chỉnh từ tệp và sau đó cout để in dòng trên màn hình.

#bao gồm
#bao gồm
#bao gồm

sử dụng không gian têngiờ;

NSchủ chốt()
{
ifstream myFile_Handler;
chuỗi myLine;

// Tập tin Mở ở Chế độ Đọc
myFile_Handler.mở ra('File_1.txt');

nếu như(myFile_Handler.is_open())
{
// Tiếp tục đọc tệp
trong khi(theo hàng(myFile_Handler, myLine))
{
// in dòng trên đầu ra chuẩn
Giá cả <<câu nói của tôi<<endl;
}
// Đóng tệp
myFile_Handler.gần();
}
khác
{
Giá cả << 'Không thể mở tệp!';
}
trở lại 0;
}

Bây giờ, chúng ta sẽ in nội dung của File_1.txt bằng lệnh sau: cat File_1.txt. Khi chúng tôi biên dịch và thực thi chương trình, rõ ràng là đầu ra phù hợp với nội dung của tệp. Do đó, chúng tôi đã đọc thành công tệp và in nội dung của tệp ra màn hình.

Ví dụ 4: Đọc và ghi vào tệp

Cho đến nay, chúng tôi đã hướng dẫn bạn cách mở, đọc, ghi và đóng tệp. Trong C ++, chúng ta cũng có thể đọc và ghi vào một tệp cùng một lúc. Để cả đọc và ghi vào một tệp, chúng ta phải lấy một đối tượng fstream và mở tệp ở chế độ ios :: in và ios :: out.

Trong ví dụ này, trước tiên chúng ta ghi một số nội dung vào tệp. Sau đó, chúng tôi đọc dữ liệu từ tệp và in ra màn hình.

#bao gồm
#bao gồm
#bao gồm

sử dụng không gian têngiờ;

NSchủ chốt()
{
fstream myFile_Handler;
chuỗi myLine;

// Mở tập tin
myFile_Handler.mở ra('File_1.txt', ios::trong |ios::ngoài);

// Kiểm tra xem tệp đã mở chưa
nếu như(!myFile_Handler)
{
Giá cả << 'Tệp không mở được!';
lối ra(1);
}

// Ghi vào tệp
myFile_Handler<< '1. Đây là một Tệp kiểm tra mẫu khác. ' <<endl;
myFile_Handler<< '2. Đây là dòng thứ hai của tệp. ' <<endl;

myFile_Handler.seekg(ios::ăn xin);

// Đọc tệp
nếu như(myFile_Handler.is_open())
{
// Tiếp tục đọc tệp
trong khi(theo hàng(myFile_Handler, myLine))
{
// in dòng trên đầu ra chuẩn
Giá cả <<câu nói của tôi<<endl;
}

// Đóng tệp
myFile_Handler.gần();
}
khác
{
Giá cả << 'Không thể mở tệp!';
}
myFile_Handler.gần();
trở lại 0;
}

Bây giờ, chúng ta sẽ biên dịch và thực thi chương trình.

Ví dụ 5: Đọc và ghi vào tệp nhị phân

Trong ví dụ này, chúng ta sẽ khai báo một lớp và sau đó ghi đối tượng vào một tệp nhị phân. Để đơn giản hóa ví dụ này, chúng ta đã khai báo lớp Employee với biến public emp_id. Sau đó, chúng tôi sẽ đọc tệp nhị phân và in kết quả ra màn hình.

#bao gồm
#bao gồm

sử dụng không gian têngiờ;

lớpNhân viên
{
công cộng:
NSemp_id;
};

NSchủ chốt()
{
ofstream binOutFile_Handler;
ifstream binInFile_Handler;

Nhân viên empObj_W, empObj_R;

// Mở tập tin
binOutFile_Handler.mở ra('worker.dat', ios::ngoài |ios::nhị phân);

// Kiểm tra xem tệp đã mở chưa
nếu như(!binOutFile_Handler)
{
Giá cả << 'Tệp không mở được!';
lối ra(1);
}

// Khởi tạo empObj_W
empObj_W.emp_id = 1512;

// Ghi vào tệp
binOutFile_Handler.viết((char *) &empObj_W,kích thước(Nhân viên));
binOutFile_Handler.gần();

nếu như(!binOutFile_Handler.tốt())
{
Giá cả << 'Đã xảy ra lỗi khi ghi tệp nhị phân!' <<endl;
lối ra(2);
}

// Bây giờ, chúng ta hãy đọc tệp worker.dat
binInFile_Handler.mở ra('worker.dat', ios::trong |ios::nhị phân);
// Kiểm tra xem tệp đã mở chưa
nếu như(!binInFile_Handler)
{
Giá cả << 'Tệp không mở được!';
lối ra(3);
}

// Đọc nội dung của tệp nhị phân
binInFile_Handler.đọc((char *) &empObj_R,kích thước(Nhân viên));
binInFile_Handler.gần();

nếu như(!binInFile_Handler.tốt())
{
Giá cả << 'Đã xảy ra lỗi khi đọc tệp nhị phân!' <<endl;
lối ra(4);
}

// In đầu ra của empObj_R
Giá cả << 'Chi tiết về Nhân viên:' <<endl;
Giá cả << 'Mã hiệu công nhân : ' <<empObj_R.emp_id <<endl;

trở lại 0;
}

Phần kết luận

Các tệp chủ yếu được sử dụng để lưu trữ dữ liệu và chúng đóng một vai trò quan trọng trong lập trình thế giới thực. Trong bài viết này, chúng tôi đã hướng dẫn bạn cách sử dụng các thao tác tệp khác nhau với ngôn ngữ lập trình C ++ bằng cách làm việc thông qua một số ví dụ. Hơn nữa, chúng tôi đã chỉ cho bạn cách đọc và ghi dữ liệu vào cả tệp văn bản và tệp nhị phân.