Thao tác vào / ra tệp
Chúng ta cần các tệp để lưu trữ kết quả đầu ra của một chương trình khi chương trình kết thúc. Sử dụng tệp, chúng tôi có thể truy cập thông tin liên quan bằng cách sử dụng các lệnh khác nhau bằng các ngôn ngữ khác nhau.
Dưới đây là danh sách một số thao tác có thể được thực hiện trên một tệp:
- Tạo một tệp mới
- Mở một tệp hiện có
- Đọc nội dung tệp
- Tìm kiếm dữ liệu trên tệp
- Ghi vào một tệp mới
- Cập nhật nội dung vào tệp hiện có
- Xóa tệp
- Đóng tệp
Ghi vào tệp
Để ghi nội dung vào một tệp, trước tiên chúng ta cần mở tệp cần thiết. Nếu tệp được chỉ định không tồn tại, thì một tệp mới sẽ được tạo.
Hãy xem cách ghi nội dung vào tệp bằng C ++.
Thí dụ
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ofstream myfile;
myfile.open ("Tempfile.txt", ios::out);
myfile << "Writing Contents to file.\n";
cout << "Data inserted into file";
myfile.close();
return 0;
}
Note -
fstream là lớp luồng dùng để điều khiển các thao tác đọc / ghi tệp.
ofstream là lớp luồng dùng để ghi nội dung vào tệp.
Chúng ta hãy xem cách ghi nội dung vào tệp bằng Erlang, một ngôn ngữ lập trình chức năng.
-module(helloworld).
-export([start/0]).
start() ->
{ok, File1} = file:open("Tempfile.txt", [write]),
file:write(File1,"Writting contents to file"),
io:fwrite("Data inserted into file\n").
Note -
Để mở một tệp, chúng tôi phải sử dụng, open(filename,mode).
Cú pháp ghi nội dung vào tệp: write(filemode,file_content).
Output - Khi chúng tôi chạy đoạn mã này, "Ghi nội dung vào tệp" sẽ được ghi vào tệp Tempfile.txt. Nếu tệp có bất kỳ nội dung hiện có nào, thì tệp đó sẽ bị ghi đè.
Đọc từ một tệp
Để đọc từ một tệp, trước tiên chúng ta phải mở tệp được chỉ định trong reading mode. Nếu tệp không tồn tại, thì phương thức tương ứng của nó trả về NULL.
Chương trình sau đây cho biết cách đọc nội dung của tệp trong C++ -
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main () {
string readfile;
ifstream myfile ("Tempfile.txt",ios::in);
if (myfile.is_open()) {
while ( getline (myfile,readfile) ) {
cout << readfile << '\n';
}
myfile.close();
} else
cout << "file doesn't exist";
return 0;
}
Nó sẽ tạo ra kết quả sau:
Writing contents to file
Note- Trong chương trình này, chúng tôi đã mở một tệp văn bản ở chế độ đọc bằng cách sử dụng “ios :: in” và sau đó in nội dung của nó trên màn hình. Chúng tôi vừa dùngwhile vòng lặp để đọc nội dung tệp từng dòng bằng cách sử dụng phương thức “getline”.
Chương trình sau đây chỉ ra cách thực hiện thao tác tương tự bằng cách sử dụng Erlang. Ở đây, chúng tôi sẽ sử dụngread_file(filename) phương pháp để đọc tất cả nội dung từ tệp được chỉ định.
-module(helloworld).
-export([start/0]).
start() ->
rdfile = file:read_file("Tempfile.txt"),
io:fwrite("~p~n",[rdfile]).
Nó sẽ tạo ra kết quả sau:
ok, Writing contents to file
Xóa một tệp hiện có
Chúng tôi có thể xóa tệp hiện có bằng các thao tác với tệp. Chương trình sau đây cho biết cách xóa một tệp hiện cóusing C++ -
#include <stdio.h>
int main () {
if(remove( "Tempfile.txt" ) != 0 )
perror( "File doesn’t exist, can’t delete" );
else
puts( "file deleted successfully " );
return 0;
}
Nó sẽ tạo ra kết quả sau:
file deleted successfully
Chương trình sau đây cho biết cách bạn có thể thực hiện thao tác tương tự trong Erlang. Ở đây, chúng ta sẽ sử dụng phương phápdelete(filename) để xóa một tệp hiện có.
-module(helloworld).
-export([start/0]).
start() ->
file:delete("Tempfile.txt").
Output - Nếu tệp “Tempfile.txt” tồn tại, thì tệp đó sẽ bị xóa.
Xác định kích thước của tệp
Chương trình sau đây cho biết cách bạn có thể xác định kích thước của tệp bằng C ++. Đây, hàmfseek đặt chỉ báo vị trí được liên kết với luồng sang vị trí mới, ngược lại ftell trả về vị trí hiện tại trong luồng.
#include <stdio.h>
int main () {
FILE * checkfile;
long size;
checkfile = fopen ("Tempfile.txt","rb");
if (checkfile == NULL)
perror ("file can’t open");
else {
fseek (checkfile, 0, SEEK_END); // non-portable
size = ftell (checkfile);
fclose (checkfile);
printf ("Size of Tempfile.txt: %ld bytes.\n",size);
}
return 0;
}
Output - Nếu tệp “Tempfile.txt” tồn tại, thì nó sẽ hiển thị kích thước của nó theo byte.
Chương trình sau đây cho biết cách bạn có thể thực hiện thao tác tương tự trong Erlang. Ở đây, chúng ta sẽ sử dụng phương phápfile_size(filename) để xác định kích thước của tệp.
-module(helloworld).
-export([start/0]).
start() ->
io:fwrite("~w~n",[filelib:file_size("Tempfile.txt")]).
Output- Nếu tệp “Tempfile.txt” tồn tại, thì nó sẽ hiển thị kích thước của nó theo byte. Nếu không, nó sẽ hiển thị “0”.