Rumah > masalah biasa > teks badan

Apakah jenis fail yang boleh dikendalikan oleh bahasa C?

青灯夜游
Lepaskan: 2022-09-19 15:53:23
asal
8967 orang telah melayarinya

Jenis fail yang boleh diproses oleh bahasa C ialah: fail teks dan fail binari. Fail yang boleh diproses oleh bahasa C dibahagikan kepada fail teks dan fail binari mengikut bentuk simpanan: 1. Fail teks menyimpan kod ASCII, dan kandungan fail boleh terus masuk dan keluar 2. Fail binari terus menyimpan aksara , dan fail binari tidak boleh disimpan Kandungan fail dikeluarkan terus ke skrin.

Apakah jenis fail yang boleh dikendalikan oleh bahasa C?

Persekitaran pengendalian tutorial ini: sistem Windows 7, versi c99, komputer Dell G3.

Dalam komputer, input dan output adalah dalam bentuk aliran data. Mengikut mod capaian, fail dibahagikan kepada fail capaian berjujukan dan fail capaian rawak. Mengikut borang storan, ia dibahagikan kepada fail binari dan fail teks. Fail teks menyimpan kod ASCII, dan kandungan fail boleh menjadi input dan output secara langsung. Fail binari menyimpan aksara secara langsung, dan kandungan fail binari tidak boleh dikeluarkan terus ke skrin. Oleh itu, fail yang bahasa C boleh diproses dibahagikan kepada fail teks dan fail binari mengikut borang storan.

Perbezaan antara fail teks dan fail binari

Fail teks biasanya digunakan untuk menyimpan aksara yang boleh dilihat dengan mata kasar, seperti fail .txt, . c, dan fail .dat, dsb., buka fail ini dengan editor teks, dan kami boleh berjaya memahami kandungan fail tersebut.

Fail binari biasanya digunakan untuk menyimpan kandungan yang tidak boleh dibaca seperti video, gambar, atur cara, dsb. Jika anda membuka fail ini dengan editor teks, anda akan melihat sekumpulan aksara bercelaru yang anda tidak faham sama sekali.

Tetapi secara fizikal, tidak ada perbezaan antara fail binari dan fail aksara Kedua-duanya adalah data yang disimpan pada cakera dalam bentuk binari.

Sebab mengapa kita boleh memahami kandungan fail teks adalah kerana fail teks menggunakan pengekodan aksara seperti ASCII, UTF-8, GBK, dll. Penyunting teks boleh mengenali format pengekodan ini dan menukar nilai pengekodan untuk Tukar kepada aksara dan memaparkannya.

Fail binari menggunakan format pengekodan khas seperti mp4, gif, exe, dll. Penyunting teks tidak mengenali format pengekodan ini dan hanya boleh menghuraikannya secara rawak mengikut format pengekodan aksara, jadi ia menjadi kucar-kacir watak-watak, ada yang tidak pernah melihatnya.

Jika kami mencipta fail mp4 baharu, menulis rentetan aksara ke dalamnya, dan kemudian membukanya dengan editor teks, anda masih boleh memahaminya. Pembaca yang berminat boleh mencubanya sendiri.

Secara amnya, jenis fail yang berbeza mempunyai format pengekodan yang berbeza dan atur cara (perisian) yang sepadan mesti digunakan untuk menghuraikannya dengan betul, jika tidak, ia akan menjadi sekumpulan aksara yang bercelaru atau tidak boleh digunakan.

Bagi pengaturcara, fail teks dan fail binari ialah pernyataan, yang menunjukkan cara anda harus membuka fail (mod teks/binari), apakah fungsi yang perlu anda gunakan untuk membaca dan menulis fail ini (fungsi baca dan tulis), dan bagaimana Penghakiman dibaca hingga akhir fail ini.

Khususnya:

1. Bagaimana untuk membuka fail?

ANSI C menentukan pustaka fungsi input dan output standard, dan menggunakan fungsi fopen() untuk membuka fail. Kaedah memanggil fungsi fopen() secara amnya:

FILE *fp;
fp=fopen(文件名,使用文件方式);
Salin selepas log masuk

Kaedah fail digunakan dalam jadual berikut:

The kaedah fail digunakan

Maksud

"r" (baca sahaja)

Buka untuk memasukkan fail teks

"w" (tulis sahaja)

Buka teks fail untuk output

"a" (tambah)

Buka fail teks untuk tambah

"rb" (baca sahaja)

Membuka fail binari untuk input

" wb" (tulis sahaja)

Buka fail binari untuk output

"ab" (tambah)

Buka fail binari untuk ditambahkan

"r " (baca dan tulis)

Buka fail teks untuk membaca/menulis

"w " (baca dan tulis)

untuk membaca /menulis Cipta fail teks

"a " (baca dan tulis)

Buka fail teks untuk membaca/menulis Fail

"rb " (baca dan tulis)

Membuka fail binari untuk membaca/menulis

"wb" (baca dan tulis)

Cipta fail binari untuk membaca/menulis

"ab " (baca dan tulis)

Buka fail binari untuk membaca/menulis

Apabila fail yang sama dibaca dari cakera ke memori (kawasan data program atau kawasan cache), kandungan dalam memori secara amnya berbeza dalam kedua-dua kaedah Ini adalah perbezaan yang ketara antara kedua-dua kaedah pembukaan.

Terdapat latar belakang di sini, iaitu, di bawah Windows, ia akan melakukan proses, iaitu, semasa menulis fail, aksara baris baharu akan ditukar kepada pengembalian kereta watak baris baharu akan disimpan fail cakera, dan apabila membaca fail, aksara baris baharu akan ditukar kepada fail pulangan, ia akan melakukan pemprosesan terbalik, iaitu, menukar pulangan pengangkutan dan suapan baris berturut-turut dalam fail kepada suapan baris.

Oleh itu, apabila membaca fail cakera, kandungan fail yang dibaca dalam mod teks mungkin lebih pendek daripada fail binari, kerana membaca dalam mod teks memerlukan dua aksara carriage return dan suapan baris untuk ditukar menjadi satu character. , yang sama dengan memotong fail. Tetapi mengapa ia hanya mungkin? Kerana mungkin tidak terdapat dua bait 45 dan 42 berturut-turut dalam teks (45 ialah kod ASCII bagi CR carriage return, 42 ialah kod ASCII bagi suapan talian CL), tiada operasi "pemangkasan", jadi membaca Kandungan ialah sama.

Khususnya, fail fail (ditulis dalam mod teks) paling baik dibaca dalam mod teks. Fail binari (ditulis dalam mod binari) paling baik dibaca dalam mod binari. Jika tidak, ia mungkin tidak betul. Perkara di atas telah dianalisis.

2. Apakah fungsi yang digunakan untuk membaca dan menulis fail?

Cara data ditulis pada cakera tidak ditentukan oleh kaedah pembukaan fail, tetapi oleh fungsi penulisan. Cara data dibaca dari cakera tidak ditentukan oleh kaedah pembukaan fail, tetapi oleh fungsi baca.

Bagaimana untuk menulis data yang dinyatakan di atas bermaksud bagaimana untuk menyimpan jenis pembolehubah? Contohnya, int 12 boleh terus menyimpan kod binari 12 (4 bait), atau ia boleh menyimpan aksara 1 dan aksara 2.

Cara membaca data bermakna jika saya ingin membaca pembolehubah int, saya boleh membacanya secara langsung saiz (int) bait, atau membaca aksara demi aksara sehingga aksara yang dibaca bukan aksara angka.

Terdapat dua set fungsi membaca dan menulis fail dalam C yang menyokong dua kaedah membaca dan menulis di atas:

  • 1.fread(buffer, size, count , fp), fwrite(penampan, saiz, kiraan, fp). Digunakan untuk membaca dan menulis blok data. Ia sepadan dengan kaedah penyimpanan pertama. Tentukan secara langsung bilangan bait untuk dibaca dan ditulis mengikut panjang bait jenis.

  • Fungsi 2fprintf dan fungsi fscanf Ia sepadan dengan kaedah membaca dan menulis kedua. Iaitu membaca dan menulis dalam format aksara. (Fungsi fprintf dan fungsi fscanf mempunyai fungsi yang serupa dengan fungsi printf dan fungsi scanf. Kesemuanya adalah fungsi membaca dan menulis berformat. Objek membaca dan menulis fungsi fprintf dan fscanf ialah fail cakera, manakala objek membaca dan menulis daripada fungsi printf dan scanf ialah terminal.)

Format panggilan umum mereka ialah:

fprintf(文件指针,格式字符串,输出列表);

fscanf (文件指针,格式字符串,输入列表);

3 Bagaimana untuk menentukan penghujung fail ?

Dalam bahasa C, atau lebih tepat lagi pustaka fungsi standard C, terdapat aksara khas EOF (takrifan ini dalam stdio.h #define EOF (-1) ), yang bermaksud :end of fail. Dalam gelung sementara, EOF digunakan sebagai tanda akhir fail Fail dengan EOF sebagai tanda akhir fail mestilah fail teks. Dalam fail teks, data disimpan dalam bentuk nilai kod ASCII aksara. Kami tahu bahawa julat nilai kod ASCII ialah 0~255, dan -1 adalah mustahil, jadi EOF boleh digunakan sebagai tanda akhir fail.

Walau bagaimanapun, dalam bahasa C, apabila data disimpan dalam fail dalam bentuk binari, nilai -1 akan muncul Pada masa ini, EOF tidak boleh digunakan sebagai tanda akhir bagi fail binari. Untuk menyelesaikan masalah ini, ANSI C menyediakan fungsi feof untuk menentukan sama ada fail telah tamat. Jika penghujung fail ditemui, nilai fungsi feof (fp) ialah 1, jika tidak ia adalah 0.

Fungsi feof boleh digunakan untuk menentukan sama ada fail binari telah tamat atau sama ada teks fail telah tamat. Walau bagaimanapun, perlu diambil perhatian bahawa apabila feof digunakan untuk menentukan penghujung fail teks, jika kod tidak ditulis dengan betul, aksara akhir fail EOF dalam teks juga boleh dibaca lihat http://baike .baidu.com/view/656648 untuk butiran htm

4 Mengetahui sama ada fail ialah fail teks atau fail binari akan "mengingatkan" kita lebih lanjut tentang fungsi membaca dan menulis yang mana kita patut pilih. .

Seperti yang dinyatakan dalam 2, cara data disimpan tidak ditentukan oleh kaedah pembukaan fail, tetapi oleh fungsi baca dan tulis.

Sebagai contoh, jika kita membuka fail sebagai fail binari (sebenarnya hanya menyatakan penukaran aksara baris baharu), ia lebih mewakili idea (maya): Saya "berharap" Data dalam fail ini adalah seperti ini, jenis int menduduki 4 bait, dan jenis char menduduki 1 bait. Dalam mod ini, saya menggunakan fread(buffer,size0f(int),1,fp) untuk membaca int ke dalam pembolehubah int.

Kami ingat

Sebelum kita mengendalikan fail, pertama sekali, kita mesti tahu sama ada fail itu adalah fail teks atau fail binari. Fail dibuka dalam mod teks, dan fail binari dibuka dalam mod binari

Jika kita ingin mengendalikan fail binari, maka kita membukanya dalam mod binari (secara teorinya ia juga boleh dibuka dalam mod fail, tetapi jika data binari ditulis Apabila terdapat 45 di dalamnya, ia akan ditukar menjadi 45,42 dan disimpan, lihat 1. Ini berkemungkinan besar berlaku). Apabila membaca dan menulis pada masa yang sama, gunakan dua fungsi fread dan fwrite.

Jika saya ingin mengendalikan fail teks, maka kami membukanya dalam mod teks (secara teorinya ia juga boleh dibuka dalam mod binari, tetapi ia tidak selamat). Apabila membaca dan menulis pada masa yang sama, gunakan fungsi tersebut fprintf, fscanf, fgetc, fputc, putw, getw, fgetc, fputs

Cadangan berkaitan: "Tutorial Video C"

Atas ialah kandungan terperinci Apakah jenis fail yang boleh dikendalikan oleh bahasa C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan