informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
🌟🌟Beranda penulis:sesuatu yang bersifat sementara__
🌟🌟Kolom milik:bahasa C
4. Fungsi yang mengontrol pembukaan dan penutupan file
2. Membaca dan menulis file secara berurutan
3. Membaca dan menulis file secara acak
4. Penentuan akhir pembacaan file
Saat kita menulis program, kita sering menyimpan data dalam variabel. Jika program keluar dan memori diambil kembali, data ini akan hilang. Lantas adakah cara agar kita bisa tetap menyimpan data tersebut agar data tersebut tetap ada saat program dibuka kembali? Jawabannya iya. Yang dapat melakukan hal ini adalah:Operasi berkas。
Data program perlu dikeluarkan ke perangkat eksternal, dan juga perlu dimasukkan dari perangkat eksternal. Untuk perangkat yang berbeda, metode masukan dan keluarannya berbeda. Untuk memfasilitasi operasi kami pada berbagai perangkat input dan output, kami memiliki konsep "aliran" yang sangat abstrak. Dalam bahasa C, operasi input dan output pada file, layar, keyboard, dll. Semuanya dilakukan melalui "stream". Secara umum, jika kita ingin menulis data atau membaca data, kita perlu membuka alirannya.
Ketika program bahasa C dimulai, defaultnya adalahtiga aliranSudah dibuka untuk kami:
stdin--Aliran masukan standar, masukan dari keyboard dalam banyak kasus.
Bahasa Inggris standar--Aliran keluaran standar, keluaran ke monitor dalam banyak kasus.
stderr--Aliran kesalahan standar, keluaran ke monitor dalam banyak kasus.
Karena ketiga aliran ini telah dibuka secara default, kita dapat langsung melakukan operasi input dan output menggunakan fungsi seperti scanf dan printf.
Ketiga aliran ini juga mempunyai tipe.Penunjuk file (FILE*) .Saat kami melakukan operasi file, kami meneruskanVariabel penunjuk file secara tidak langsung dapat menemukan file yang terkait dengannya.。
Bergantung pada bagaimana data diatur, file data dipanggilberkas teksataufile biner . Data disimpan dalam bentuk biner di memori,Jika dikeluarkan ke file penyimpanan eksternal tanpa konversi, maka itu adalahfile biner。
Jika perlu disimpan dalam kode ASCII di penyimpanan eksternal, maka perlu dikonversi sebelum disimpan.File yang disimpan dalam bentuk karakter ASCII adalahberkas teks。
Bagaimana sepotong data disimpan dalam file?
Karakter selalu disimpan dalam bentuk ASCII, dan data numerik dapat disimpan dalam bentuk ASCII atau biner. Misalnya ada bilangan bulat 10000, jika di-output ke disk dalam bentuk kode ASCII, maka akan menempati 5 byte pada disk (satu byte untuk setiap karakter), sedangkan jika di-output dalam bentuk biner, maka hanya akan menempati 4 byte pada disk.
Setelah memahami pengetahuan prasyarat ini, mari langsung ke inti - membuka file dan menutup file. Bahasa C menyediakan dua fungsi, yang masing-masing bertanggung jawab untuk membuka dan menutup file. Prototipenya adalah sebagai berikut:
buka berkas:BERKAS * dapat dibuka ( const char * namafile, const char * mode );
Tutup berkas:ke dalam ftutup ( FILE * aliran );
Fungsi fopen memiliki dua parameter,Parameter pertama dinyatakan dalam bentuk stringnama file, parameter kedua adalah fileMetode terbuka, diwakili oleh string .Saat menggunakan fungsi ini, kita perlu membuat avariabel penunjuk file Untuk menerima, ketika file gagal dibuka, ia mengembalikan pointer nol. Mengenai cara pembukaannya, berikut ini:
Metode terbuka | arti | Jika file yang ditentukan tidak ada |
"r" (hanya baca) |
Untuk memasukkan data, buka file teks yang ada
| Mengembalikan penunjuk nol |
"w" (hanya tulis) |
Untuk mengeluarkan data, buka file teks
| Buat file baru |
"a" (tambahkan) | Tambahkan data ke akhir file teks | Buat file baru |
"rb" (hanya baca) | Untuk memasukkan data, buka file biner | Mengembalikan penunjuk nol |
"wb" (hanya tulis) | Untuk mengeluarkan data, buka file biner | Buat file baru |
"ab" (tambahkan) | Tambahkan data ke akhir file biner | Buat file baru |
"r+" (membaca dan menulis) | Untuk membaca dan menulis, buka file teks | Mengembalikan penunjuk nol |
"w+" (membaca dan menulis) | Untuk membaca dan menulis, buat file teks baru | Buat file baru |
"a+" (membaca dan menulis) | Buka file dan baca dan tulis di akhir file | Buat file baru |
"rb+" (membaca dan menulis) | Buka file biner untuk membaca dan menulis | Mengembalikan penunjuk nol |
"wb+" (membaca dan menulis)
| Untuk membaca dan menulis, buat file biner baru | Buat file baru |
"ab+" (membaca dan menulis)
| Buka file biner dan baca dan tulis di akhir file | Buat file baru |
Untuk fungsi fclose, parameternya adalah penunjuk file, yang digunakan untuk menutup file yang ditunjuk oleh penunjuk file.
Selanjutnya, kami mencoba membuka dan menutup file:
- #include <stdio.h>
-
- int main()
- {
- FILE* pf = fopen("test.txt", "w");
- if (pf == NULL)//文件打开失败则退出程序
- {
- perror("fopen");
- return 0;
- }
- printf("文件打开成功n");
- fclose(pf);
- pf = NULL;//避免出现野指针,及时制空
- return 0;
- }
Terlihat bahwa karena metode pembukaannya adalah "w", file bernama "test.txt" muncul di jalurnya.
Selanjutnya, kami memperkenalkan beberapa fungsi untukMembaca atau menulis data ke file。
Nama fungsi | Fungsi | Berlaku untuk |
fgetc | Fungsi masukan karakter | Semua aliran masukan |
fputc | fungsi keluaran karakter | Semua aliran keluaran |
gadget | Fungsi input baris teks | Semua aliran masukan |
fput hasil | Fungsi keluaran baris teks | Semua aliran keluaran |
fscanf | Fungsi masukan format | Semua aliran masukan |
cetak f | Memformat fungsi keluaran | Semua aliran keluaran |
takut | Masukan biner | Aliran masukan file |
menulis f | Keluaran biner | Aliran keluaran file |
Selanjutnya kita coba gunakanfscanfDancetak ffungsi:
Parameter pertama dari kedua fungsi ini adalah penunjuk file, yang digunakan untuk membaca dan menulis data file. Parameter selanjutnya sama dengan fungsi scanf dan printf.
- #include <stdio.h>
-
- int main()
- {
- FILE* pf = fopen("test.txt", "w");//要写入数据,以写的形式打开文件
- if (pf == NULL)
- {
- perror("fopen");
- return 0;
- }
- fprintf(pf, "123456");//向文件中写入数据
- fclose(pf);
- pf = NULL;
- return 0;
- }
Seperti yang Anda lihat, data telah ditulis ke file. Selanjutnya kita menggunakan fungsi fscanf untuk mencetak data file ke layar:
- #include <stdio.h>
-
- int main()
- {
- char str[20] = { 0 };
- FILE* pf = fopen("test.txt", "r");//要读取数据,以读的形式打开文件
- if (pf == NULL)
- {
- perror("fopen");
- return 0;
- }
- fscanf(pf, "%s", str);//读取数据到str当中
- printf(str);
- fclose(pf);
- pf = NULL;
- return 0;
- }
Fungsi dari fungsi fseek adalahBerdasarkan posisi dan offset penunjuk fileposisipenunjuk berkas . Prototipenya adalah sebagai berikut:
int fseek ( FILE * aliran, long int offset, int asal );
Parameter pertamanya adalah penunjuk file, parameter kedua adalah offset relatif terhadap posisi yang disetel, dan parameter ketiga adalah posisi yang disetel.
Bahasa C mendefinisikan tigaMakro, Anda dapat memilih salah satunya sebagai parameter ketiga:
SEEK_SET: posisi awal file
SEEK_CUR: Posisi penunjuk file saat ini
SEEK_END: akhir file
Setelah menemukan penunjuk file, kita dapat membaca atau menulis di lokasi file yang ditentukan.
fungsi ftell digunakan untuk kembaliOffset penunjuk file relatif terhadap posisi awal . Prototipe fungsi:
panjang int ftell (FILE * aliran);
fungsi mundur digunakan untukMengembalikan posisi penunjuk file ke awal file . Prototipe fungsinya:
batal putar balik(FILE*aliran);
1. Untukberkas teks, pertama-tama kita bisa menggunakanfgetcFungsi ini mengulang karakter dalam file hingga EOF dibaca, menunjukkanPembacaan file berakhir。
2. Untukfile biner,Kita gunakantakutFungsi menentukan nilai kembaliannya:Apakah kurang dari angka sebenarnya yang harus dibaca? .Jika kurang dariMembaca berakhir.
Untuk dua kasus di atas, fileDi akhir membaca, kita bisa terus menilaiAlasan mengapa pembacaan file berakhir . Perkenalkan dua fungsi:kejantananDanketakutan。
kejantananFungsi yang digunakan untukTentukan akhir pembacaan filealasanapakah atau tidakAkhir file ditemui . Prototipenya adalah sebagai berikut:
int feof ( FILE * aliran );
Jika file tersebut karenaBaca sampai akhir fileKetika pembacaan selesai, EOF dikembalikan; dalam kasus lain, 0 dikembalikan.
ketakutanFungsi yang digunakan untukTentukan akhir pembacaan filealasanapakah atau tidakTerjadi kesalahan I/O . Prototipenya adalah sebagai berikut:
int ferror(FILE*aliran);
Jika file tersebut karenaTerjadi kesalahan I/OKetika pembacaan selesai, nilai bukan nol dikembalikan; dalam kasus lain, 0 dikembalikan.
Selanjutnya kami mencoba menulis sepotong kode untuk menilai akhir pembacaan file:
- #include <stdio.h>
-
- int main()
- {
- int c = 0;
- FILE* fp = fopen("test.txt", "r");
- if (fp == NULL)
- {
- perror("fopen");
- return 0;
- }
- while ((c = fgetc(fp)) != EOF)//返回EOF则读取结束
- {
- putchar(c);
- }
- //判断读取结束的原因
- if (ferror(fp))
- puts("I/O错误n");
- else if (feof(fp))
- puts("文件读取结束n");
- fclose(fp);
- fp = NULL;
- return 0;
- }
Hari ini kita belajar tentang pengoperasian file, cara membuka dan menutup file, menulis data atau membaca data dari file, fungsi mengatur pointer file, dan menentukan akhir pembacaan file. Jika menurut Anda apa yang dikatakan blogger itu baik, silakan tinggalkan sedikit suka dan terima kasih atas dukungan Anda❤❤❤