Berbagi teknologi

[Bahasa C] Mainkan dengan operasi file

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

🌟🌟Beranda penulis:sesuatu yang bersifat sementara__

🌟🌟Kolom milik:bahasa C

Daftar isi

perkenalan

1. Membuka dan menutup file

1. mengalir

2. Aliran standar

3. File teks dan file biner

4. Fungsi yang mengontrol pembukaan dan penutupan file

2. Membaca dan menulis file secara berurutan

3. Membaca dan menulis file secara acak

1.fungsi pencarian

2. fungsi pemberitahuan

3. fungsi mundur

4. Penentuan akhir pembacaan file

Meringkaskan


perkenalan

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

1. Membuka dan menutup file

1. mengalir

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.

2. Aliran standar

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.

3. File teks dan file biner

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.

4. Fungsi yang mengontrol pembukaan dan penutupan file

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 terbukaartiJika 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 teksBuat file baru
"rb" (hanya baca)Untuk memasukkan data, buka file binerMengembalikan penunjuk nol
"wb" (hanya tulis)Untuk mengeluarkan data, buka file binerBuat file baru
"ab" (tambahkan)Tambahkan data ke akhir file binerBuat file baru
"r+" (membaca dan menulis)Untuk membaca dan menulis, buka file teksMengembalikan penunjuk nol
"w+" (membaca dan menulis)Untuk membaca dan menulis, buat file teks baruBuat file baru
"a+" (membaca dan menulis)Buka file dan baca dan tulis di akhir fileBuat file baru
"rb+" (membaca dan menulis)Buka file biner untuk membaca dan menulisMengembalikan penunjuk nol
"wb+" (membaca dan menulis)
Untuk membaca dan menulis, buat file biner baruBuat file baru
"ab+" (membaca dan menulis)
Buka file biner dan baca dan tulis di akhir fileBuat 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:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE* pf = fopen("test.txt", "w");
  5. if (pf == NULL)//文件打开失败则退出程序
  6. {
  7. perror("fopen");
  8. return 0;
  9. }
  10. printf("文件打开成功n");
  11. fclose(pf);
  12. pf = NULL;//避免出现野指针,及时制空
  13. return 0;
  14. }
hasil operasi:

Terlihat bahwa karena metode pembukaannya adalah "w", file bernama "test.txt" muncul di jalurnya.

2. Membaca dan menulis file secara berurutan

Selanjutnya, kami memperkenalkan beberapa fungsi untukMembaca atau menulis data ke file

Nama fungsiFungsiBerlaku untuk
fgetcFungsi masukan karakterSemua aliran masukan
fputcfungsi keluaran karakterSemua aliran keluaran
gadgetFungsi input baris teksSemua aliran masukan
fput hasilFungsi keluaran baris teksSemua aliran keluaran
fscanfFungsi masukan formatSemua aliran masukan
cetak fMemformat fungsi keluaran Semua aliran keluaran
takutMasukan binerAliran masukan file
menulis fKeluaran binerAliran 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.

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE* pf = fopen("test.txt", "w");//要写入数据,以写的形式打开文件
  5. if (pf == NULL)
  6. {
  7. perror("fopen");
  8. return 0;
  9. }
  10. fprintf(pf, "123456");//向文件中写入数据
  11. fclose(pf);
  12. pf = NULL;
  13. return 0;
  14. }

Seperti yang Anda lihat, data telah ditulis ke file. Selanjutnya kita menggunakan fungsi fscanf untuk mencetak data file ke layar:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char str[20] = { 0 };
  5. FILE* pf = fopen("test.txt", "r");//要读取数据,以读的形式打开文件
  6. if (pf == NULL)
  7. {
  8. perror("fopen");
  9. return 0;
  10. }
  11. fscanf(pf, "%s", str);//读取数据到str当中
  12. printf(str);
  13. fclose(pf);
  14. pf = NULL;
  15. return 0;
  16. }
hasil operasi:

3. Membaca dan menulis file secara acak

1.fungsi pencarian

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.

2. fungsi pemberitahuan

fungsi ftell digunakan untuk kembaliOffset penunjuk file relatif terhadap posisi awal . Prototipe fungsi:

panjang int ftell (FILE * aliran);

3. fungsi mundur

fungsi mundur digunakan untukMengembalikan posisi penunjuk file ke awal file . Prototipe fungsinya:

batal putar balik(FILE*aliran);

4. Penentuan akhir pembacaan file

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:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int c = 0;
  5. FILE* fp = fopen("test.txt", "r");
  6. if (fp == NULL)
  7. {
  8. perror("fopen");
  9. return 0;
  10. }
  11. while ((c = fgetc(fp)) != EOF)//返回EOF则读取结束
  12. {
  13. putchar(c);
  14. }
  15. //判断读取结束的原因
  16. if (ferror(fp))
  17. puts("I/O错误n");
  18. else if (feof(fp))
  19. puts("文件读取结束n");
  20. fclose(fp);
  21. fp = NULL;
  22. return 0;
  23. }

Meringkaskan

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❤❤❤