Bài tập về file trong c

*
It-Pro Training
*

Tổng quát tháo cách xử lý File - Lập trình C: Bài 17

1.Giới thiệu

Một tệp dữ liệu (file) là 1 tập vừa lòng dữ liệu, chúnghay được lưu trữ trên các thứ nlỗi Ổ đĩa, USB, Đĩa cứng tuyệt bên trên những đámmây. Với các lịch trình C từ bài trước tiên đến thời điểm này, tài liệu nhập vào trong mộtlịch trình được nhập trường đoản cú trải qua những bàn phím máy vi tính ...Tuy nhiên có nhiềuphương pháp để nhập dữ liệu nguồn vào cũng như xuất tài liệu đầu cho công tác đólà thông qua tệp tài liệu. Cmùi hương trình C sẽ đọc dữ liệu từ bỏ tệp tài liệu, sau khiđối chiếu, cách xử lý với tính tân oán với khối tài liệu, thì chúng sẽ được lưu trữ trsinh sống lạitệp tài liệu.

Bạn đang xem: Bài tập về file trong c

Vậy tệp dữ liệu là khu vực tàng trữ biết tin tài liệu đã đượcxử lý vày chương trình. Tệp dữ liệu không chỉ là là vị trí lưu trữ dữ liệu mà lại xéttheo góc cạnh mở rộng thì nó còn là một vị trí cất lịch trình tiến hành. ví dụ như nhưnhững tệp gồm đuôi mở rộng là .exe đấy là các tệp xúc tiến của một chương trình.

Để áp dụng tệp tài liệu chúng ta vẫn tìm hiểu những vấn đềliên quan tới vào/ra (I/O) của tệp.. Cách thức ghi biết tin vào một trong những file, cácthức hiểu ban bố xuất phát từ một tệp tin. Có thể nhìn nhận các thao tác làm việc vào/ra một filecũng tương tự như các thao tác làm việc vào/ra bên trên một vật dụng đầu cuối, mặc dù điểmkhác hoàn toàn cơ bạn dạng của làm việc vào/ra cùng với file cùng thiết bị đầu cuối đó là chươngtrình rất cần được xác định một tệp tin cụ thể bởi vì có không ít file trong ổ cứng. Xácđịnh đúng đắn một tệp tin với những thao tác làm việc cùng với tệp tin nlỗi gọi file, ghi file hoặc vớicả hai làm việc đọc/ghi file.

Một tư tưởng đặc trưng nữa tương quan đó là stream(Luồng dữ liệu). C cung cấp khai niệm luồng dữ liệu (stream) là 1 trong những khái niệutrừu tượng hóa nằm trong lòng bạn lập trình sẵn vào sản phẩm vào/ra. Các thiết bịvào/ra trong lập trình sẵn C đó là màn hình, trang bị in, keyboard với tệp dữ liệu(file). Trong trường thích hợp này sản phẩm vào/ra ví dụ là tệp tin và một luồng dữ liệulà một trong những bối cảnh ngắn gọn xúc tích bao gồm liên quan tới tệp tin. Mặc dù File có khá nhiều kiểu mẫukhông giống nhau tuy nhiên với luồng nhỏng liệu thì toàn bộ các kiểu như nhau. Luồng dữ liệucung cấp tính giao diện nhất quán mang lại xây dựng viên. Luồng dữ liệu vào/ra sử dụngvùng tài liệu tạm thời nhằm lưu trữ, vùng dữ liệu tạm thời gọi là buffer xuất xắc gọi là bộ nhớ đệmvà được thực hiện để gọi và ghi tệp tin.

Xét một phương pháp ví dụ, các sản phẩm nước ngoài vi nhỏng ổ đĩa,băng từ bỏ và những đồ vật nước ngoài vi là hoàn toàn khác biệt. Song khối hệ thống tệp tin vớibộ nhớ lưu trữ đệm đang đổi khác chúng thành một sản phẩm xúc tích được Call là luồng dữ liệu(Stream) do thế và một hàm ghi dữ liệu ra tệp tin trên đĩa thì có thể áp dụng nóra các đồ vật khác ví như màn hình, vật dụng in.

Hình minc họa mô hình vào/ra của luồng dữ liệu:

*

Hìnhsố 1 : Mô hình vào/ra luồng dữ liệu

Mô hình trên là mô hình vào/ra tác dụng. lúc tạo thành luồngdữ liệu link với một file trên ổ đĩa, thì bộ nhớ lưu trữ đệm được tự động hóa tạo nên vànó được kết nối với luồng dữ liệu. Bộ nhớ đệm là 1 trong những kân hận bộ lưu trữ tạm thời được sử dụngđể lưu trữ biết tin Giao hàng cho các thao tác làm việc hiểu cùng ghi tệp tin. Vùng bộ lưu trữ tạmlà cần thiết chính vì đặc thù của ổ đĩa là lắp thêm bao gồm triết lý cách xử trí theo khối hận,vấn đề này Tức là ổ đĩa vận động tác dụng nhất kết quả nhất khi tài liệu đượcgọi với ghi vào khối bao gồm kích cỡ nhất quyết.Mỗi trang bị phần cứng của các hãng sản xuất không giống nhau thì tất cả kích thước kân hận tài liệu làkhác nhau, nó có thể có giá trị trường đoản cú vài trăm mang đến vài ngàn bytes. Tuy nhiên thìko phải xác minh chính xác size của khối hận.

Bộ nhớ đệm link với luồng dữ liệu tệp tin đóng góp vaitrò là 1 giao tiếp thân luồng dữ liệu cùng với Hartware ổ đĩa. Như chương trình sẽghi dữ liệu vào luồng, tài liệu sẽ tiến hành nghi vào bộ lưu trữ đệm cho đến lúc bộ lưu trữ đệmbị đầy và các thực thể nội dung của bộ lưu trữ đệm sẽ tiến hành nghi, nhỏng một khối, vào ổđĩa. Tiến trình hiểu tài liệu được tiến hành giống như nhỏng tiến ghi dữ liệu. Quátrình tạo nên và cách xử trí của bộ nhớ lưu trữ đệm được thống trị tự động hóa vị hệ quản lý điều hành, lậptrình viên ko bắt buộc quyên tâm cho tới vấn đề này. C cung cấp một trong những hàm để triển khai việcvới bộ nhớ đệm.

Trong thực tiễn, các cách xử lý của bộ nhớ đệm xảy ra trongsuốt quy trình thực hiện lịch trình, đôi khi có thể dữ liệu mà lại chương trìnhghi vào trong ổ đĩa vẫn tồn tại trong bộ lưu trữ đệm. Nếu chương trình bị cheo vì chưng mộtlý do như thế nào đó, vào trường vừa lòng này rất có thể tài liệu không bị bị mất, nó rất có thể vẫnđược lưu trong bộ lưu trữ đệm, người sử dụng hoàn toàn có thể chần chờ bởi vì dữ liệu đó khôngbao gồm trong ổ đĩa. Dữ liệu nằm trong cỗ đệm cho tới lúc dữ liệu vào bộ đệm đượccó tác dụng tươi Hay những được ghi vào thành file trong ổ đĩa.

Luồng dữ liệu được liên kết cùng với tệp tin trong quá trìnhtiến hành cách xử trí hiểu file. Luồng tài liệu ngắt gắn kết với file khi thực hiệnthao tác làm việc đóng file. Vị trí hiện tại lúc làm việc với tệp tin là địa chỉ lộ diện tạilàm việc tiếp theo lúc triển khai hành động đọc hoặc ghi tệp tin (Cái này đã đượcnắm rõ sinh hoạt các phần tiếp theo).

Có 2 loại luồng dữ liệu : Văn phiên bản (Text) cùng nhị phân(binary).

Luồng tài liệu văn bản là một hàng các kí tự(characters).

Một tệp văn phiên bản có thể xem là một luồng dữ liệu những kýtự. Luồng tài liệu văn bạn dạng gắn kết với những tệp tin văn phiên bản. Luồng dữ liệu văn uống bảnđược tổ chức triển khai thành những mẫu, mỗi dòng rất có thể có chứa một hoặc nhiều các kí tựvới được lưu lại vì cam kết từ bỏ quánh nhằm xong xuôi loại. Một mẫu bao gồm Số lượng kí tự lớnđộc nhất vô nhị là 255 kí từ. Chụ ý quan niệm cái làm việc đó là định nghĩa của tệp tin chđọng khôngđề xuất khai niệm string trong C. Lúc một luồng dữ liệu vẻ bên ngoài văn phiên bản được sử dụng,C áp dụng ký trường đoản cú xuống cái ‘ ’ và bất kỳ cam kết tự làm sao khắc ghi sự hoàn thành dòngcơ mà hệ quản lý và điều hành cung cấp.

Trong Hệ quản lý và điều hành Dos áp dụng tổ hợp (CR-LF) để sangchiếc new. Khi dữ liệu được ghi (write) vào file theo chế độ văn phiên bản, từng ‘ ’ sẽtự động hóa đổi khác sang CR-LF. trái lại Lúc hiểu (read) dữ liệu, mỗi một khi chạm mặt CR-LFnó vẫn tự động hóa biến đổi thanh lịch ‘ ’. Trong UNIX, sự biến đổi ko được thựchiện tại, Ký từ xuống loại bắt đầu là không đổi khác.

Khi một file dữ liệu văn uống phiên bản được áp dụng, tất cả nhị kiểubộc lộ đọc tin cho dữ liệu sẽ là : internal(Nội bộ) với external (msinh sống rộng). Ví dụ : Giá trị gồm phong cách int xét theo khía cạnhnội bộ (bên trong) của chủ yếu int thì kích cỡ tàng trữ của nó đang là 2 bytes hoặc4 bytes. Nếu xét theo chi tiết external (msống rộng), thì tài liệu int có thể đượclưu trữ cùng diễn đạt dưới dạnh là một trong xâu ký từ hoặc có thể là dữ liệu kiểu hexadecimal.

Việc đổi khác dữ liệu giữa internal cùng external là cực kỳ dễ ợt. ví dụ như sử dụng printf để thựchiện tại những thao tác hiển thị báo cáo với fprintf nhằm ghi biết tin ra file. Thì printflà 1 trong ví dụ về internal với fprintf là đại diện cho external, việc gửi đổinày được thực hiện tiếp tục. Trong thao tác làm việc hiểu dữ liệu thì external scanfor fscanf là đại diện thay mặt mang lại Việc chuyển đổi giữa internal và external.

File nhị phân chứa một tập thích hợp các bytes. Trong C, mộtbyte cùng một ký từ (charater) là tương tự. lúc làm việc với tệp tin nhị phân thìcũng biến thành tđê mê chiếu tới luông dữ liệu nhị phân, đối với luồng tài liệu văn phiên bản thìluồng dữ liệu nhị phân có 2 điểm khác:

Thứnhất: Luồng tài liệu nhị phân là dãy những bytes tương ứng 1-1bên trên những thứ ghi/phát âm. Điều kia Tức là không có sự đổi khác. Số bytesđược ghi cùng hiểu bởi đúng số bytes nằm tại thứ ko kể. Không có sự phântách bóc giữa những loại và không thực hiện cam kết từ đánh dấu sự kết thúc loại. Các ký kết tựNULL cùng ký tự cuối cái không tồn tại sự khác nhau cùng với các cam kết từ không giống.

Thứhai: C ko cấu hình thiết lập cấu trúc bên trên file nhị phân, cùng việcgọi cùng ghi file theo bất kỳ biện pháp như thế nào sẽ tiến hành lập trình sẵn viên chọn lọc.

Trong C, cách xử lý một tệp tin bằng chuyên môn truy cập ngẫunhiên liên quan cho tới bài toán dịch rời địa điểm hiện tại quý phái vị trí phù hợp trongfile trước khi tiến hành những thao tác làm việc đọc/ghi dữ liệu. Như vậy đã cho thấy một đặcđiểm thứ 2 của file nhị phân, tệp tin nhị phân có thể triển khai những làm việc đọc/ghiđồng thời.

lấy ví dụ như tệp tin các đại lý tài liệu hoàn toàn có thể được chế tạo với giải pháp xử lý nhưmột file nhị phân. Thao tác cập nhật một bản ghi (record) liên quan tới Việc địnhvị vị trí của record, hiểu record vào vào bộ lưu trữ, chỉnh sửa ban bố record,sau cùng là ghi trở lại record đó vào tệp tin bên trên ổ đĩa. Các thao tác làm việc này thườngxảy ra trên file nhị phân, mà lại thảng hoặc Lúc tra cứu thấy trong số ứng dụng xử lýfile văn phiên bản.

2. Sử dụng tệp tin vào C

Có 4 hành động cơ phiên bản tuyệt nhất so với file. Các hành độngđó bao gồm:

+Knhị báo một trở nên bé trỏ có kiểu dáng FILE

+Msống tệp tin trải qua hàm fopen để ghi hoặc đọc

+Ghi hoặc phát âm tệp tin (Xử lý file) thông qua một hàm như thế nào đó

+Sử dụng hàm fcchiến bại nhằm đóng góp tệp tin.

2.1 Khai báo lót trỏ kiểu dáng FILE

Bởi vì một vài lượng khác biệt các file hoàn toàn có thể được sửdụng trong chương trình. khi phát âm với ghi một loại file làm sao kia thì rất cần phải xác minh.

Xem thêm: Cách Cài Đặt Google Tag Manager, Hướng Dẫn Cài Đặt Google Tag Manager Cho Website

Vấn đề này được triển khai thông qua đổi thay bé trỏ trỏ đếnkết cấu tệp tin. FILE là một trong cấu tạo được knhì báo trong stdio.h . Các thành bên trong cấu tạo FILE được công tác sử dụngtrong các chuyển động truy vấn không giống nhau. Tuy nhiên thiết kế viên không tốt nhất thiếtbắt buộc quyên tâm đến vấn đề đó. Tuy nhiên trước lúc từng một file được mnghỉ ngơi, thì cần khaibáo một trở thành con trỏ bao gồm hình dáng FILE.

Khi hàm fopen() được Gọi, hàm sẽ khởi tạo ra một diễn tả củacấu tạo file với tạo nên một nhỏ trỏ trỏ cho cấu trúc file kia. Con trỏ này đượcsử dụng trong toàn bộ các hoạt động tiếp sau trên tệp tin. Cú pháp khai báo củabé trỏ có kiểu FILE nhỏng sau :

Cú phápFILE *fi le_pointer_name,…;

Trog kia :

Vídụ

FILE*ifp;

FILE*ofp;

lúc đó bé trỏ ifp với ofp là 2 con trỏ tất cả hình dạng tệp tin.

le_pointer_name:Tên bé trỏ gồm loại FILE.

2.2. Msinh hoạt file

Để mở một file thì bọn họ áp dụng hàm fopen. Cú pháphàm nlỗi sau :

FILE*fopen(const char *fname, const char *mode);

Trong số đó :

fname :Tên tệp tin trên đĩa.

mode:Kiểu xử lý tệp tin.

Vídụ:

FILE *fptr = fopen(“example.txt”, “r”);

Msống tệp nhằm thực hiện hiểu dữ liệu

Với làm việc msống tệp để triển khai ghi tài liệu, bọn chúng tacố kỉnh “r” thành “w”.

Nguyên ổn mẫu hàm fopen vào stdio.h. trong những số ấy cũng baocó các hàm xử trí file quan trọng khác. Tên của file tất cả loại xâu cam kết tự do thoải mái vậy*fname sẽ là 1 trong hằng bé trỏ bao gồm hình trạng char. Tên của file rất cần được xác địnhđúng đắn.

Các file trong ổ đĩa khi nào cũng có tên. Tên file đượcđặt theo công cụ của hệ điều hành và quản lý. Trong DOS, tên file bao gồm độ nhiều năm từ một mang đến 8 kýtự. Với hệ quản lý và điều hành Windows và Unix thì tên tệp tin bao gồm độ lâu năm lên đến 256 ký kết từ bỏ.

Tên tệp tin vào C hoàn toàn có thể bao gồm đựng đường truyền không thiếu thốn củafile.

Vídụ:

FILE*fptr = fopen(“c:\examdata\example.txt”, “r”);

Kiểucách xử trí file : Là một trong các xâu ký từ gồm trongdanh sách sau. Nó hình thức bí quyết cách xử lý đối với các file đã mở

Chotệp tin vnạp năng lượng bản

*

Bảng hàng đầu : Kiểu xửlý file văn bản

Cho tệp nhị phân

*

Bảng số 2 : Kiểu xửlý tệp tin nhị phân

Ví dụ:

charfilename<80>;

FILE*fp;

printf(“Nhậpbáo cáo tên file !”);

gets(filename);

fp= fopen(filename,“w”);

2.3. Kiểm tra kết quả hàm fopen

Hàm fopen trả về một bé trỏ loại FILE *, nhỏ trỏ trỏmang đến cấu trúc FILE cùng được áp dụng để truy cập vào file. khi file cấp thiết mởvì chưng một nguyên do nào đấy hàm fopen đang trả về NULL. Các lý do hoàn toàn có thể bao gồm :

+ Tên tệp tin bị sai

+ Cố rứa mở file trên ổ đĩa, mặc dù file kia khôngthể đọc được.

+ Cố chũm mở file trên thư mục ko sống thọ bên trên ổđĩa hoặc ổ đĩa ko mãi mãi.

+ File đó không cho phép cách xử trí sống chính sách ghi hoặc nghỉ ngơi chếđộ phát âm ...

Ví dụ

FILE*fp = fopen(“data.dat”,“r”);

If(fp== NULL)

printf(“Khôngmsinh sống được data.dat !”);

exit(1);

Sử dụng lý lẽ đánh giá hàm fopen với cái giá trị NULL,bí quyết này chưa phải là bí quyết đưa ra đúng đắn nguyên ổn nhân tại vì sao lỗi xuất hiện.Nhưng hoàn toàn có thể hiển thị thông báo lỗi cho tất cả những người dùng để thực hiện cố gắng msinh sống filelần tiếp nữa hoặc xong xuôi quá trình mngơi nghỉ file.

2.4. Đóng file và giải pchờ bộ nhớ lưu trữ đệm

Sau khi dứt quy trình cách xử trí cùng với file, sử dụnghàm fclose() để triển khai đóng góp file.

Cú pháp:

intfclose(FILE *fp);

Giá trị trả về :

0 : Nếu đóng tệp tin thành công

-1: Nếu đóng tệp tin bị lỗi

Lúc chương trình chạy, nếu hàm main() hoàn thành hoặckhi chạm chán hàm exit() thì toàn cục các luồn tài liệu đang tự động giải phóng và đóng góp.Thực tế vào một lịch trình đơn giản ko độc nhất thiết yêu cầu đóng góp tệp tin, do vìkhối hệ thống sẽ từ đóng tổng thể trước lúc ngừng công tác trước khi trlàm việc về hệquản lý điều hành. Tuy nhiên với lập trình sẵn viên, họ chế tác kiến thức giỏi triển khai đóngtệp tin Lúc xong xuôi những quá trình giải pháp xử lý với file.

Khi một file được đóng góp, bộ nhớ đệm gắn thêm với tệp tin đang đượcgiải phóng (có tác dụng tươi), Tất cả những luồn thao tác sẽ tiến hành đóng lúc thực hiện hàmfcloseall(). Hàm này có nguyên ổn chủng loại là fcloseall(void).

Hàm fcloseall vẫn giải pđợi vùng bộ nhớ lưu trữ đếm (buffer) gắnvới luồng thông báo (stream) cùng kết quả trả về số các luồng đọc tin bị đóng góp.

Bộ nhớ đệm kết nối cùng với luồng tài liệu có thể được giảipngóng nhưng không nhất thiết phải đóng góp nó, bằng phương pháp áp dụng hàm fflush() hoặc hàm fushall().Sử dụng hàm fflush() khi bộ lưu trữ đệm đính với file là đã được ghi vào file trên ổđĩa, trong những lúc file đó vẫn sử dụng. Sử dụng hàm fushall() để giải phóng bộ nhớ lưu trữ đệmmang đến tất cả các luồng lên tiếng.

Cúpháp

int fflush(FILE *fp);

int flushall(void);

Môtả hàm fflush

Tmê man số bề ngoài *fp là con trỏ phong cách FILE, được trả vềvì hàm fopen Lúc file này đã được mở. Nếu một tệp tin được msinh sống ngơi nghỉ cơ chế xử lý ghicông bố (writing), thì fflush đã triển khai ghi ban bố trường đoản cú bộ lưu trữ đệm vào ổđĩa. Nếu file được mlàm việc làm việc chế độ xử lý gọi đọc tin (reading) thì lúc ấy cỗ nhớđệm sẽ bị xóa.

Xem thêm: Hướng Dẫn Chi Tiết 24 Bước Cài Đặt Sql Server 2012 Express, Hướng Dẫn Cài Đặt Sql Server 2012

Hàm fflush trả về 0 trường hợp thành công, trả về EOF nếu bịlỗi.

Môtả hàm flushall

Hàm flushall trả về số lượng những luồng tài liệu vẫn mởvà tiến hành giải phóng bộ nhớ đệm cho toàn bộ các luồng dữ liệu đã mlàm việc.


Chuyên mục: Kiến thức Hosting