Isi kandungan:
Video: Top 25 Word 2016 Tips and Tricks 2024
Akses fail rawak dalam pengaturcaraan C tidak ada hubungannya dengan nombor rawak. Sebaliknya, fail tersebut boleh diakses di mana-mana tempat, di sana, dan bahkan di sana. Jenis akses ini berfungsi dengan baik apabila fail tersebut dihiasi dengan rekod saiz yang sama. Pengertian rekod membawa struktur, yang dengan mudah boleh ditulis ke fail dan kemudian diambil balik secara individu, terpilih, atau sekaligus.
Cara membaca dan memutar balik
Seperti program anda membaca data dari fail, ia menjejaki kedudukan dari mana data dibaca dalam fail. Kedudukan kursor dikekalkan supaya lokasi di mana kod membaca atau menulis dalam fail tidak hilang.
Apabila pertama kali membuka fail, kedudukan kursor berada di permulaan fail, bait pertama. Jika anda membaca rekod 40-bait ke dalam ingatan, kedudukan kursor adalah 40 bait dari awal. Jika anda membaca sehingga akhir fail, kedudukan kursor juga mengekalkan lokasi tersebut.
Untuk mengelakkan perkara yang mengelirukan, kedudukan kursor sering dirujuk sebagai penunjuk fail , walaupun ia bukan pembolehubah penunjuk atau jenis penunjuk FILE. Ini hanya lokasi dalam fail di mana data seterusnya akan dibaca.
Anda boleh huru-hara dengan kedudukan kursor dengan menggunakan beberapa fungsi menarik di C. Dua daripada mereka adalah ftell () dan mundur (). Fungsi ftell () mengembalikan kedudukan kursor semasa yang diimbangi sebagai nilai int panjang. Fungsi mundur () menggerakkan kursor kembali ke permulaan fail.
Gelung sementara dalam Tell and Rewind dibaca dalam rekod dari ikatan. db fail. Di Talian 28, fungsi ftell () mengembalikan kedudukan kursor. Jika lebih besar daripada satu entri (bererti bahawa entri kedua telah dibaca), kedudukan kursor ditetapkan semula ke permulaan fail oleh fungsi mundur () pada Talian 29.
TELL DAN REWIND
# include # termasuk #include int main () {entry struct {char actor [32]; int tahun; tajuk char [32];}; bon kemasukan struktur; FILE * a007; int count = 0; a007 = fopen ("bon. db", "r"); jika (! a007) {puts ("menang SPECTER!"); (1);} while (fread (& bond, sizeof (entry struct), 1, a007)) {printf ("% st% dt% sn" jika (ftell (a007)> sizeof (entri struktur)) mundur (a007); kiraan ++; jika (count> 10) pecah;} fclose (a007); kembali (0);}
Untuk menentukan offset yang sepatutnya, pernyataan jika membandingkan hasil daripada fungsi ftell () dan pengendali sizeof entri struktur. Perlu diingat bahawa ftell () hanya mengembalikan nilai int panjang, bukan bilangan struktur tertentu.
Kira-kira pemboleh ubah, diisytiharkan dan diasaskan pada Talian 14, menjejaki berapa kali gelung sementara berulang. Sekiranya tidak, program ini akan dilancarkan tanpa henti. Itu teruk. Oleh itu, apabila nilai kiraan lebih besar daripada 10, gelung memecahkan dan kemudian fail ditutup dan program berakhir.
Latihan 1 : Ketik kod sumber daripada Beritahu dan Pulangkan ke editor anda. Bina dan lari untuk melihat bagaimana fungsi ftell () dan mundur () berfungsi.
Bagaimana untuk mencari rekod tertentu
Apabila fail mengandungi rekod semua saiz yang sama, anda boleh menggunakan fungsi fseek () untuk memetik sebarang item individu. Format untuk fseek () ialah
fseek (mengendalikan, mengimbangi, dari mana);
mengendalikan adalah pemegang fail, penunjuk FILE mewakili fail yang dibuka untuk membaca. mengimbangi ialah bilangan bait dari permulaan, akhir, atau kedudukan semasa dalam fail. Dan mana adalah salah satu dari tiga pemalar: SEEK_SET, SEEK_CUR, atau SEEK_END untuk permulaan, kedudukan semasa, atau akhir fail, masing-masing.
Selagi fail anda mengandungi rekod saiz yang tetap, anda boleh menggunakan fseek () untuk memetik rekod tertentu, seperti yang ditunjukkan dalam Cari Rekod Khusus dalam Fail.
MEMERIKSA REKAIR KHUSUS DALAM FILE
#include #include #include int main () {entry struct {char actor [32]; int tahun; tajuk char [32];}; bon kemasukan struktur; FILE * a007; a007 = fopen ("bon. db", "r"); jika (! a007) {puts ("menang SPECTER!"); keluar (1);} fseek (a007, sizeof (entri struktur) * 1, SEEK_SET); fread (& bond, sizeof (entri struktur), 1, a007); printf ("% st% dt% sn", bon aktor, bon tahun, gelaran); fclose (a007); kembali (0);}
Kod yang ditunjukkan dalam Cari Rekod Khusus dalam Fail sekali lagi agak serupa dengan kod yang ditunjukkan dalam Penyenaraian 22-9. Penambahan besar ialah fungsi fseek () yang ditunjukkan pada Baris 21. Ia menetapkan kedudukan kursor supaya fungsi fread () yang berikut (merujuk kepada Baris 22) dibaca dalam rekod tertentu yang terletak di dalam pangkalan data.
Pada Talian 21, fungsi fseek () memeriksa file yang diwakili oleh mengendalikan a007. Offset dikira dengan mengalikan saiz struktur penyertaan.
Seperti pada array, mengalikan saiz itu dengan 1 menghasilkan rekod kedua dalam fail; kalikan nilai dengan 0 (atau sebutkan 0 dalam fungsi) untuk membaca rekod pertama. The SEEK_SET malar memastikan bahawa fseek () mula melihat dari permulaan fail.
Kesan bersih kod adalah bahawa rekod kedua dalam ikatan tersebut. db fail dipaparkan.
Latihan 2: Taip kod sumber dari Cari Rekod Spesifik dalam Fail. Bina dan jalankan untuk melihat rekod kedua dalam fail.