[Powered by Google Translate] [Fitxategia I / O]
[Jason Hirschhorn, Harvard Unibertsitatea]
[Hau da CS50, CS50.TV]
Fitxategi bat dela uste dugu, zer dator burura Microsoft Word dokumentu bat da,
JPEG irudi bat, edo MP3 song,
eta elkarreragin modu ezberdinetan fitxategi mota horietako bakoitzean.
Esate baterako, Word dokumentu batean testua gehitzen dugu
JPEG irudi bat moztu kanpo dugu agian ertzak edo koloreak retouch.
Hala ere, kanpaia pean gure ordenagailuan fitxategiak besterik ez dira
zeroen eta bai sekuentzia luze bat baino.
Sortu da aplikazio zehatz fitxategia elkarreraginean
zenbat denbora sekuentzia hori tramitatzeko eta erabiltzaileari aurkeztuko erabakitzeko.
Alde batetik, dokumentu bat besterik ez byte begiratu,
edo 8 zeroen eta direnak, eta pantailan erakutsi ASCII karaktere bat.
Beste alde batetik, bitmap irudi bat 3 byte begiratu,
edo 24 zeroen eta bai,
interpretatu eta 3 zenbakiak hamaseitarretan
ordezkatzen dituzten balio gorria, berdea eta urdina
irudi baten pixel bat.
Whatever begiratu ahal izango dute atsegin zure pantailan, core,
fitxategiak dira, ez da ezer zeroen eta bai sekuentzia bat baino gehiago.
Hargatik murgiltze eta begiratu nola manipulatzen dugu zeroen eta bai horiek
orduan fitxategi batetik irakurtzea eta idaztea.
>> Hasteko, hautsi behera 3-parte prozesu erraza sartu dut.
Ondoren, bi adibide kodea erakusten dituzten hiru zati horiek murgiltze dut.
Azkenik, prozesua berrikusi dut eta bere xehetasunak garrantzitsuenetako batzuk.
Zure mahaigaineko esertzen edozein fitxategi bezala,
lehenengo gauza egin behar da irekitzeko.
C hori egiten dugu erakuslea geratuko aurredefinitutako struct
diskoan fitxategi bat adierazten du.
Funtzio-dei honetan ere, erabaki nahi dugu ala ez dugu idatzi edo fitxategia irakurri.
Gero, benetako irakurketa eta idazketa egiten dugu.
Daude funtzio espezializatuak zati hau erabili ahal izango dugu,
eta ia denak gutun F, fitxategia nabarmentzen hasten dira.
Azkenik, goiko izkinan fitxategi X gorri txiki Akin zure ordenagailuan ireki,
funtzio-dei final fitxategia itxi egiten dugu.
Orain zer egin behar dugu ideia orokor bat dugula,
dezagun kodea sartu dive.
>> Direktorio honetan, bi C fitxategiak eta dagozkien fitxategi exekutagarriekin dugu.
Typewriter programa bat komando-lerroko argumentu bat hartzen du,
Dokumentuaren izena sortu nahi dugu.
Kasu honetan, deitu doc.txt dugu.
Dezagun exekutatu programa eta lerro pare bat idatzi.
Hi. Nire izena Jason da.
Azkenik, idatzi dugu "irteteko."
Gaur egun zerrendara fitxategi guztiak direktorio honetan
dokumentu berri bat izeneko doc.txt existitzen dela ikusten dugu.
Fitxategia programa hau sortu da.
Eta, jakina, handiegia da zeroen eta bai sekuentzia luze bat baino gehiago ez.
Ireki fitxategi berria bada,
3 kode lerro sartu dugu gure programa ikusiko dugu
Hi. May name Jason da.
Baina zer gertatzen da benetan denean typewriter.c runs on?
Interes-line Gurekin line 24.
Ildo horretatik,, gure fitxategia erakuslea aldarrikatzen dugu.
Hau erakuslea, fopen itzultzen duen funtzioa Bi argumentu hartzen ditu.
Lehenengo eta behin, hala badagokio, fitxategi-luzapena barne fitxategi-izena da.
Gogoratu fitxategi-luzapena ez duen eragina izan, bere maila txikiena fitxategia.
Beti ari gara aurre zeroen eta bai sekuentzia luze bat.
Baina eragina du nola fitxategiak interpretatuko dira, eta zer aplikazio erabiltzen dira horiek irekitzeko.
Fopen argudio bigarren letra bakar bat da
ireki fitxategia ondoren egiteko asmoa dugu dago.
Badira hiru argumentu honen aukerak - W, R, eta A.
Honako hau aukeratu dugu w kasu honetan, nahi dugun fitxategian idatzi duelako.
R, ziurrenik asmatzea da fitxategia irakurtzean.
Eta fitxategi erantsi da.
Bai w eta fitxategiak idatziz erabil daitezke bitartean,
w fitxategia hasieran idazten hasiko da
eta potentzialki ordezkatu duten aldez aurretik gordetako edozein datu.
Berez, fitxategi, ireki ez badu dagoeneko existitzen,
da gure lan present direktorioa sortu.
Hala eta guztiz ere, sartzeko edo beste kokaleku batean fitxategi bat sortu nahi dugu,
fopen lehen argumentua,
file name gain, fitxategi-bide bat ezarri ahal izango dugu.
Prozesu honen lehenengo zatian, kode-lerro luze bat besterik ez den bitartean,
beti da praktika onak lerro multzo bat
dela egiaztatu fitxategia zuzen ireki edo sortu ziurtatzeko.
Fopen null itzultzen bada, ez genuke nahi gure programa aurrera,
eta hau gertatzen dena da sistema eragilearen memoria
edo fitxategi bat irekitzen duen direktorioa ez dugu behar den baimenik saiatu gara.
>> Taldea bi prozesua gertatzen typewriter bitartean loop.
CS50 liburutegi funtzioa erabiltzen dugu, erabiltzaileak sarrera lortzeko,
eta ez dute nahi programatik irten suposatuz,
funtzioa fputs erabiltzen dugu katea hartu eta idazteko fitxategia.
fputs hainbat funtzio bat erabili dugu fitxategia idazteko izan da.
Beste batzuk fwrite, fputc, eta are fprintf.
Kontuan hartu gabe funtzio jakin amaituko dugu, nahiz eta,
horiek guztiak jakin behar, bere argumentuak bidez,
gutxienez bi gauza -
zer idatzi behar dira, eta non idatzi behar behar da.
Gure kasuan, sarrerako kate behar idatzi behar da
eta LHko zuzentzen duen erakuslea non idazten ari gara.
Programa honetan, prozesua bi parte nahiko erraza.
Besterik ez kate bat hartzen ari gara, erabiltzaileak
eta gehituz zuzenean gure koadernoan apur-to-no input baliozkotzea edo segurtasun egiaztapenak.
Askotan, ordea, zati bi egingo da zure kodea soltean.
Azkenik, hiru zati line 58 da, non fitxategia itxi egiten dugu.
Hemen, fclose eta gure jatorrizko fitxategia erakuslea gainditu deitzen diogu.
Ondorengo lerro, zero itzuli gara, gure programaren amaiera seinaleztatzeko.
Eta, hori bai, hiru zati gisa duten bezain sinplea da.
>> Dezagun fitxategiak irakurtzean mugitzeko.
Itzuli gure direktorioan printer.c izeneko fitxategi bat daukagu.
Dezagun exekutatu fitxategia sortu besterik ez dugu
doc.txt.
Programa honek, izena dioen bezala, erraz inprimatu fitxategiaren edukia gainditu.
Eta hor egon behar dugu.
Kode lerro idatzi izan dugun eta gordetako doc.txt.
Hi. Nire izena Jason da.
Dive printer.c sartu badugu,
kodea asko typewriter.c bidez besterik ez dugu ibili antzeko itxura ikusiko dugu.
Izan ere, linea 22, non fitxategia ireki dugu,
eta linea 39, fitxategia non itxi dugu,
dira, bai ia typewriter.c berdina, fopen argumentua bigarren gorde.
Oraingoan, fitxategi batetik irakurtzen ari gara,
beraz, aukeratu dugu w r ordez.
Horrela, dezagun prozesuaren bigarren zatian zentratu.
Line 35, gure 4 begizta bigarren baldintza gisa,
Dei bat egiten dugu, fgets
aurretik fputs companion funtzioa.
Oraingoan, hiru argumentu ditugu.
Katea gordeko dira karaktere array erakuslea da.
Bigarren karaktere kopurua gehienez ere irakurri behar da.
Eta hirugarren lan egiten ari gara fitxategi erakuslea da.
Loop for amaitzen da fgets null itzultzen du nabarituko duzu.
Daude bi arrazoi hori gertatu da, agian.
Lehenik eta behin, akats bat gertatu da, agian.
Bigarrena, eta litekeena da, fitxategia amaieran iritsi ziren eta ez karaktere gehiago irakurri.
Kasu horretan, galdetzen ari bazara, bi funtzioak onartzea kontatu digu existitzen ez
eta horregatik hau null bereziki erakuslea kausa da.
Eta, ez da harritzekoa, fitxategiekin lan egin dute geroztik,
bai ferror funtzioa eta feof funtzioa Irteeran gutun f.
>> Azkenik, aurretik dugu, buruzko ohar bat, fitxategi funtzioa amaiera azkar,
Izan ere, aipatu bezala, feof gisa idatzia.
Sarritan, zeure burua aurkituko duzu eta bitartean loops your way fitxategiak bidez pixkanaka-pixkanaka irakurri.
Horrela, loops horiek amaitzeko modu bat behar duzu, fitxategi hauen amaieran iritsi ondoren.
Deitzen feof zure koadernoan erakuslea eta, egia bada ikusteko checking
besterik ez da egin lezake.
Hori dela eta, baliteke baldintza loop (! Feof (LH)) bitartean irtenbide bezala primeran egokia dirudi.
Hala ere, esan dugu gure testu-fitxategi batean lerro bat utzi.
Gure bitartean loop sartu dugu eta guztia lan egingo du aurreikusita bezala.
On hurrengo txandan bidez, gure programa LH-feof egia bada egiaztatuko du,
baina - eta hau hemen ulertzeko puntu funtsezkoa da
ez da egia besterik ez oraindik.
Feof helburua ez delako egiaztatu
irakurri funtzio bat dei hurrengo fitxategi amaieran hit bada,
baizik ala ez fitxategi amaieran jada lortu ikusteko.
Adibide honen kasuan,
gure fitxategiaren azken lerrora irakurtzen primeran doa arazorik gabe,
baina programa ez da oraindik ezagutzen ditudan dugu hit gure fitxategiaren amaieran.
Ez da ez da bat irakurri osagarriak arte fitxategiaren amaieran counters da.
Horrela, baldintza bat zuzena honako hau izango litzateke:
fgets eta bere hiru argumentu - irteera, irteera tamaina, eta LH -
eta hori ez da berdina null.
Ikuspegia hartu printer.c da,
eta, kasu honetan, loop irten ondoren,
deitu feof edo ferror erabiltzaileari jakinaraziko begizta hau irteten arrazoiketa jakin asmoz.
>> Fitxategi batetik irakurtzea eta idaztea da, bere oinarrizko
3-prozesuan parte sinple bat.
Lehenik eta behin, fitxategia ireki dugu.
Bigarrena, gauza batzuk jarri genituen gure fitxategi edo gauza batzuk hartu daudelarik.
Hirugarren, fitxategia itxi egiten dugu.
Lehen eta azken zatiak dira erraza.
Erdiko zatia da non stuff delikatua datza.
Nahiz eta kanpaia azpian beti ari gara zeroen eta bai sekuentzia luze bat aurre,
abstrakzio geruza bat gehitzeko kodeketa du
sekuentzia bihurtzen da zerbait xehetasun gehiago antza zer gaude ikusteko erabiltzen.
Esate baterako, 24-bit bit-mapa fitxategia ari gara lan egiten bada,
Seguruenik egingo dugu aldi berean hiru byte idatzi edo irakurtzeko.
Kasu horretan, zentzurik izango litzateke behar bezala definitu eta izendatu
3 byte handi bat da, eta egitura.
>> Fitxategiekin lan korapilatsu dirudien arren dezake,
horiek erabiltzeko aukera ematen du,, zerbait benetan nabarmenak egin digu.
Munduko egoera aldatu ahal izango dugu gure programa kanpo,
gure programaren bizitza haratago bizi den zerbait sortu ahal izango dugu,
edo nahiz eta aldatu ahal izango dugu zerbait sortu zen gure programa hasi exekutatu aurretik.
Fitxategiak jarduteko programazioaren zati benetan indartsua C.
eta zer kodea etorri sortu zaren ikusteko ilusioa dut.
Nire izena Jason Hirschhorn da. Hau CS50 da.
[CS50.TV]
>> [Barreak]
Ongi da. One hartu. Hemen goaz.
Fitxategi bat dela uste dugu >> Oh, itxaron. Sentitzen dugu.
[Barreak] Larreina.
Hey there.
Fitxategi bat dela uste dugu,
Uste fitxategi bat - Ongi da. Esadazu denean prest zaude.
Oh, great.
Teleprompter bat irakurtzean arren badirudi - no. Nire txarra.