[Powered by Google Translate] [File I / O]
[Jason Hirschhorn, Università ta 'Harvard]
[Dan huwa CS50, CS50.TV]
Meta naħsbu ta 'fajl, dak li tiġi f'moħħna huwa dokument Microsoft Word,
immaġni JPEG, jew kanzunetta MP3,
u aħna jinteraġixxu ma 'kull wieħed minn dawn it-tipi ta' fajls b'modi differenti.
Per eżempju, f'dokument Word aħna żid it-test
filwaqt li bi xbieha JPEG nistgħu uċuħ tar-raba l-truf jew retouch-kuluri.
Madankollu taħt il-barnuża kollha tal-fajls fil-kompjuter tagħna huma xejn aktar
minn sekwenza twila ta 'żero u dawk.
Huwa f'idejn l-applikazzjoni speċifika li jinteraġixxi mal-fajl
biex jiddeċiedu kif il-proċess din is-sekwenza twila u tippreżentah lill-utent.
Fuq naħa waħda, dokument tista 'tħares lejn wieħed biss byte,
jew 8 żero u dawk, u juru l-karattru ASCII fuq l-iskrin.
Min-naħa l-oħra, immaġni Bitmap tista 'tħares lejn 3 bytes,
jew 24 żero u dawk,
u jinterpreta bħala 3 numri hexadecimal
li jirrappreżentaw il-valuri għal aħmar, aħdar u blu
f'wieħed pixel ta 'immaġni.
Kull ma jistgħu look like fuq l-iskrin tiegħek, fil-qalba tagħhom,
fajls huma xejn aktar minn sekwenza ta 'żero u dawk.
Mela ejja adsa u ħarsa lejn kif għandna attwalment jimmanipulaw dawn żero u dawk
meta niġu għall-kitba lejn u qari mill-fajl.
>> I ser tibda billi jitkissru l-isfel fis-sempliċi 3-parti proċess.
Sussegwentement, jien ser adsa fis eżempji kodiċi 2 li juru dawn il-partijiet 3.
Fl-aħħarnett, I ser tirrevedi l-proċess u xi wħud mill-dettalji l-aktar importanti tagħha.
Bħal kull fajl li tpoġġi fuq id-desktop tiegħek,
l-ewwel ħaġa li għandek tagħmel hu li tiftħu.
Fl C nagħmlu dan billi tiddikjara pointer għal Struct predefinit
li jirrappreżenta fajl fuq diska.
F'dan is-sejħa funzjoni, aħna wkoll jiddeċiedi jekk irridu li tikteb jew taqra mill-fajl.
Sussegwentement, aħna nagħmlu l-qari attwali u l-kitba.
Hemm numru ta 'funzjonijiet speċjalizzati nistgħu nużaw f'din il-parti,
u kważi kollha kemm huma jibdew bl-ittra F, li stands għall-fajl.
Last, simili għall-X aħmar ftit fil-kantuniera ta 'fuq tal-fajls miftuħa fuq il-kompjuter tiegħek,
aħna qrib il-fajl ma 'sejħa funzjoni finali.
Issa li għandna idea ġenerali ta 'dak li aħna qed tmur biex tagħmel,
ejja adsa fis-kodiċi.
>> F'dan id-direttorju, għandna żewġ fajls C u fajls eżekutibbli tagħhom korrispondenti.
Il-programm typewriter tieħu waħda argument linja tal-kmand,
l-isem tad-dokument irridu noħolqu.
F'dan il-każ, aħna ser sejħa hija doc.txt.
Ejja run-programm u tidħol koppja ta 'linji.
Hi. Jisimni Jason.
Fl-aħħarnett, aħna ser tip "nieqaf."
Jekk aħna issa lista kollha tal-fajls f'dan id-direttorju,
naraw li dokument ġdid teżisti imsejħa doc.txt.
Dik hija l-fajl f'dan il-programm biss maħluqa.
U ovvjament, huwa wisq huwa xejn aktar minn sekwenza twila ta 'żero u dawk.
Jekk aħna miftuħa dan il-fajl ġdid,
naraw l-linji 3 tal-kodiċi aħna daħlu fis-programm tagħna -
Hi. Isem Mejju huwa Jason.
Imma x'inhu attwalment għaddejjin meta runs typewriter.c?
L-ewwel linja ta 'interess għalina hija linja 24.
F'dan il-linja, aħna niddikjaraw pointer fajl tagħna.
Il-funzjoni li prospetti dan il-werrej, fopen, jieħu żewġ argumenti.
L-ewwel huwa l-isem ta 'fajl inkluża l-estensjoni tal-fajl jekk ikun xieraq.
Ifakkar li l-estensjoni fajl ma jinfluwenzax il-fajl fuq il-livell baxx tagħha.
Aħna dejjem jittrattaw ma 'sekwenza twila ta' żero u dawk.
Iżda dan ma influwenza kif fajls huma interpretati u applikazzjonijiet dak huma użati biex tiftaħ lilhom.
It-tieni argument li fopen huwa ittra waħdanija
li stands għal dak li aħna nippjanaw li nagħmlu wara we tiftaħ il-fajl.
Hemm tliet għażliet għal dan l-argument - W, R, u A.
Imxejna magħżul w f'dan il-każ għaliex irridu li jikteb lill-fajl.
R, kif inti tista 'probabbilment raden, huwa għall-qari għall-fajl.
U huwa għall jpoġġu għall-fajl.
Filwaqt li kemm w u jista 'jintuża għall-kitba għall-fajls,
w se tibda tikteb mill-bidu tal-fajl
u potenzjalment jissostitwixxu kwalunkwe data li qabel kienu maħżuna.
Konvenzjonalment, l-fajl aħna miftuħa, jekk ma jkunux diġà jeżistu,
huwa maħluq fl-direttorju tax-xogħol tagħna preżenti.
Madankollu, jekk irridu li jkollhom aċċess jew toħloq fajl f'post differenti,
fl-ewwel argument ta 'fopen,
aħna jistgħu jispeċifika mogħdija fajl minbarra l-isem ta 'fajl.
Filwaqt li l-ewwel parti ta 'dan il-proċess huwa biss linja waħda tal-kodiċi twil,
huwa dejjem prattika tajba li jinkludu sett ieħor ta 'linji
li jivverifikaw biex jiżguraw li l-fajl kien b'suċċess miftuħa jew maħluqa.
Jekk fopen prospetti nulli, aħna ma tkunx tixtieq li nimxu 'l quddiem mal-programm tagħna,
u dan jista 'jiġri jekk is-sistema operattiva huwa barra ta' memorja
jew jekk aħna tipprova tiftaħ fajl fil-direttorju li aħna ma jkollhom l-permessi xierqa.
>> It-tieni parti tal-proċess iseħħ loop filwaqt typewriter s.
Aħna nużaw funzjoni librerija CS50 biex tikseb input mill-utent,
u jekk wieħed jassumi li ma jridux li nieqaf-programm,
aħna nużaw l-fputs funzjoni li jieħdu l-sekwenza u jiktbu għall-fajl.
fputs hija biss waħda mill-bosta funzjonijiet nistgħu jużaw biex jikteb lill-fajl.
Oħrajn jinkludu fwrite, fputc, u anki fprintf.
Irrispettivament mill-funzjoni partikolari aħna jispiċċaw jużaw, għalkemm,
kollha kemm huma jeħtieġu li jkunu jafu, permezz argumenti tagħhom,
mill-inqas żewġ affarijiet -
dak li jeħtieġ li tkun miktuba u fejn jeħtieġ li jiġu miktuba sabiex.
Fil-każ tagħna, input huwa l-sekwenza li jeħtieġ li tkun miktuba
u fp huwa l-pointer li jidderiġi ahna fejn aħna qed miktub.
F'dan il-programm, parti tnejn ta 'l-proċess huwa pjuttost sempliċi.
Aħna qed sempliċement jieħdu string mill-utent
u żżidu direttament għall-fajl tagħna bi ftit għall-ebda input validazzjoni jew kontrolli ta 'sigurtà.
Spiss, madankollu, parti tnejn se jieħdu l-biċċa l-kbira tal-kodiċi tiegħek.
Fl-aħħarnett, parti 3 huwa fuq il-linja 58, fejn aħna tagħlaq il-fajl.
Here we call fclose u tgħaddih pointer tagħna inkartament oriġinali.
Fil-linja sussegwenti, nerġgħu lura żero, sinjalar l-aħħar tal-programm tagħna.
U, iva, parti 3 huwa sempliċi bħal dik.
>> Ejja jimxu fuq qari mill-fajls.
Lura fl-direttorju tagħna għandna fajl imsejjaħ printer.c.
Ejja run mal-fajl aħna biss maħluqa -
doc.txt.
Dan il-programm, kif tissuġġerixxi l-isem, sempliċiment se jistampa l-kontenut tal-fajl mgħoddi lilha.
U hemm aħna għandna hija.
Il-linji ta 'kodiċi kellna ittajpjat qabel u salvati fil doc.txt.
Hi. Jisimni Jason.
Jekk aħna adsa fis printer.c,
naraw li ħafna tal-kodiċi jistenna simili għal dak li aħna biss mixi permezz ta 'fil typewriter.c.
Tabilħaqq linja 22, fejn aħna miftuħa l-fajl,
u l-linja 39, fejn aħna għalqet il-fajl,
huma t-tnejn kważi identiċi għal typewriter.c, ħlief għal argument fopen 2.
Din id-darba aħna qed qari mill-fajl,
hekk aħna għażlu r minflok w.
Għalhekk, ejja tiffoka fuq it-tieni parti tal-proċess.
F'konformità 35, bħala l-kondizzjoni tieni 4 loop tagħna,
nagħmlu sejħa biex fgets,
il-funzjoni anëillari li fputs minn qabel.
Din id-darba għandna tliet argumenti.
L-ewwel hija l-pointer għall-firxa ta 'karattri, fejn l-sekwenza tkun maħżuna.
It-tieni huwa n-numru massimu ta 'karattri li jinqraw.
U l-tielet huwa l-pointer għall-fajl li aħna qed jaħdmu.
Int ser ikollok avviż li l-linja ta tispiċċa meta fgets prospetti nulli.
Hemm żewġ raġuni li dan seta 'ġara.
L-ewwel, żball seta 'seħħ.
It-tieni, u aktar probabbli, it-tmiem tal-fajl intlaħaq u f'karattri mhux aktar kienu jinqraw.
Fil-każ li int mintix, żewġ funzjonijiet jeżistu li jippermettu magħna biex tgħid
liema raġuni hija l-kawża ta 'dan il-werrej null partikolari.
U, mhux sorpriża, peress li dawn għandhom x'jaqsmu ma 'ħidma ma' fajls,
kemm il-funzjoni ferror u l-bidu funzjoni feof mal-f ittra.
>> Fl-aħħarnett, qabel aħna nikkonkludu, wieħed Nota malajr dwar it-tmiem ta 'funzjoni fajl,
li, kif għadu kif issemma, huwa miktub kif feof.
Spiss inti ser issib ruħek bl-użu waqt u għal linji biex progressivament taqra tiegħek mod permezz ta 'fajls.
Għalhekk, ikollok bzonn mod biex tintemm dawn loops wara li inti jilħqu t-tmiem ta 'dawn il-fajls.
Isejħu feof fuq pointer fajl tiegħek u verifika biex tara jekk huwa veru
se tagħmel dan.
Għalhekk, filwaqt li loop mal-kundizzjoni (! Feof (FP)) jista 'jidher bħala soluzzjoni perfettament adatta.
Madankollu, ngħidu aħna għandna linja waħda jitħalla fil-fajl test tagħna.
Aħna ser jidħol loop filwaqt tagħna u kollox se taħdem kif ippjanat.
Fuq il-fażi li jmiss permezz ta ', programm tagħna se tikkontrolla biex tara jekk feof ta fp huwa veru,
iżda - u dan huwa l-punt kruċjali li wieħed jifhem hawn -
mhux se jkun veru għadha biss.
Dak għax l-iskop ta 'feof mhuwiex li tivverifika
jekk is-sejħa li jmiss għal funzjoni taqra se tolqot it-tmiem tal-fajl,
iżda pjuttost biex tivverifika jekk jew le l-aħħar tal-fajl diġà ntlaħaq.
Fil-każ ta 'dan l-eżempju,
qari tal-aħħar linja tal-fajl tagħna tmur perfettament tajjeb,
iżda l-programm ma tafx li konna hit-aħħar tal-fajl tagħna.
Mhuwiex sakemm ma wieħed jaqra addizzjonali li hija counters t-tmiem tal-fajl.
Għalhekk, kundizzjoni korretta tkun li ġej:
fgets u tliet argumenti tagħha - produzzjoni, id-daqs ta 'produzzjoni, u FP -
u kollha ta 'dak li ma ugwali għal null.
Dan huwa l-approċċ ħadna fil printer.c,
u f'dan il-każ, wara l-ħruġ loop,
inti tista 'sejħa feof jew ferror li jinforma lill-utent dwar il-motivazzjoni speċifika għall-ħruġ f'dan loop.
>> Kitba għal u qari mill-fajl huwa, l-aktar bażiċi tagħha,
sempliċi 3-parti proċess.
L-ewwel, aħna tiftaħ il-fajl.
It-tieni, npoġġux xi affarijiet fil-fajl tagħna jew tieħu xi affarijiet minnha.
It-tielet, aħna qrib il-fajl.
L-ewwel u l-aħħar huma faċli.
Il-parti tan-nofs huwa fejn l-għalf delikata tinsab.
U għalkemm taħt il-barnuża aħna qed dejjem jittrattaw ma 'sekwenza twila ta' żero u dawk,
ma tgħin meta kodifika biex iżżid saff ta 'estrazzjoni
li jixgħel l-sekwenza fis xi ħaġa li jixbaħ iżjed dak li aħna qed jintużaw biex jaraw.
Per eżempju, jekk aħna qed jaħdmu ma 'fajl Bitmap 24-bit,
aħna ser x'aktarx tkun qari jew bil-miktub tlett bytes kull darba.
F'liema każ, ikun jagħmel sens li jiġu definiti u xieraq l-isem
a Struct li huwa ta '3 bytes kbir.
>> Għalkemm ħidma ma 'fajls jista' jidher ikkumplikat,
użu minnhom jippermetti li tagħmel xi ħaġa verament eċċezzjonali.
Aħna jistgħu jbiddlu l-istat tal-dinja ta 'barra programm tagħna,
nistgħu noħolqu xi ħaġa li jgħix lil hinn mill-ħajja tal-programm tagħna,
jew nistgħu saħansitra l-bidla xi ħaġa li kienet maħluqa qabel programm tagħna bdiet taħdem.
Interazzjoni ma 'fajls hija parti tassew qawwija ta' programmazzjoni C.
u jien eċċitati biex tara dak li int ser toħloq magħha fil-kodiċi li ġejjin.
Jisimni Jason Hirschhorn. Dan huwa CS50.
[CS50.TV]
>> [Daħk]
Okay. Wieħed jieħu. Here we go.
Meta naħsbu ta 'fajl - >> Oh, stenna. Jiddispjacini.
[Daħk] Okay.
Ħej hemm.
Meta naħsbu ta 'fajl -
Meta taħseb ta 'fajl - Okay. Tell me meta int lest.
Oh, kbir.
Għalkemm qari mill-teleprompter jista 'jidher - l-ebda. Bad tiegħi.