[Powered by Google Translate] [Fayl I / O] [Jason Hirschhorn, Harvard Universiteti] [Bu, CS50.TV CS50 edir] Biz bir fayl hesab zaman, nə, bir Microsoft Word sənəd ağla JPEG image və ya MP3 mahnı, və biz müxtəlif yollarla bu cür faylları hər biri ilə qarşılıqlı. Məsələn, bir Word sənəd, biz mətn əlavə JPEG image ilə biz kənarları həyata məhsul və ya rəng retuş bilər isə. Lakin başlıq altında kompüter faylları bütün bir şey var adet sıfır və olanları uzun bir ardıcıllıqla deyil. Bu fayl ilə əməkdaşlıq xüsusi proqram var Bu uzun ardıcıllıqla emal və istifadəçi təqdim necə qərar verəcək. Bir tərəfdən, bir sənəd, yalnız bir byte baxmaq bilər ya 8 adet sıfır və olanları və ekranda bir ASCII xarakter göstərilir. Digər tərəfdən, bir bitmap image, 3 bytes baxmaq bilər və ya 24 adet sıfır və olanları və 3 hexadecimal nömrələri kimi şərh ki, qırmızı, yaşıl və mavi üçün dəyərlər təmsil bir şəkil bir pixel edir. Nə olursa olsun onlar əsas da, ekranda kimi görünə bilər faylları adet sıfır və olanları bir ardıcıllıqla daha çox heç bir şey var. Belə edək dalış və biz, həqiqətən, bu adet sıfır və olanları manipulyasiya necə baxmaq bu yazı və bir faylı oxu gəldiyi zaman. Mən bir sadə 3-hissə prosesinə aşağı qırılma ilə başlamaq lazımdır. Sonra, bu üç hissədən göstərir ki, iki kodu nümunələri daxil dalış lazımdır. Nəhayət, mən prosesi nəzərdən və onun ən mühüm məlumat bəzi lazımdır. Kimi masaüstünüzde oturur hər hansı bir fayl ilə, etmək üçün ilk şey açmaq üçün. C biz təyin struct bir pointer bildirərək bunu ki, disk bir fayl təmsil edir. Bu funksiya zəng, biz də yaza və ya faylı oxuya qərar. Sonra, biz faktiki oxu və yazı yoxdur. Biz bu hissəsində istifadə edə bilərsiniz ixtisaslaşdırılmış funksiyaların bir sıra var və demək olar ki, hamısı fayl duran məktubu F ilə başlayır. Son faylları üst küncündə kiçik qırmızı X yaxın, kompüter açmaq biz bir final funksiyası zəng ilə fayl bağlayın. İndi biz nə olacaq nə ümumi bir fikir var ki, kodu daxil dive edək. Bu kataloq, biz iki C faylları və onların müvafiq çalıştırılabilir fayllar var. The makina proqram, bir command line mübahisə edir biz yaratmaq istəyirik sənədin adı. Bu halda, biz doc.txt zəng edəcəyik. Nin proqram run və xətləri bir neçə daxil edək. Salam. My name Jason edir. Nəhayət, "çıxın." Yazın lazımdır Indi bu directory bütün faylları siyahısını edin biz yeni bir sənəd doc.txt deyilən mövcud olduğunu görürük. Fayl yalnız yaradılan bu proqram var. Əlbəttə, bu çox adet sıfır və olanları uzun bir ardıcıllıqla başqa bir şey deyil. Bu yeni fayl açmaq varsa, biz proqram daxil kod 3 hat bax - Salam. May adı Jason edir. Amma nə həqiqətən typewriter.c çalıştırıldığında olub? Bizim üçün maraq ilk line line 24. Bu xətt, biz fayl göstərici bəyan edir. Bu göstərici, fopen qaytarır ki, funksiyası, iki dəlilləri edir. Ilk fayl uzantısı müvafiq hallarda, o cümlədən fayl adı. Bir fayl uzantısı ən aşağı səviyyədə fayl təsir etmir Xatırladaq ki,. Biz həmişə adet sıfır və olanları uzun ardıcıllığı ilə məşğul olursunuz. Lakin bu faylları təfsir və nə applications onları açmaq üçün istifadə olunur necə təsir edir. Fopen ikinci arqument bir məktub ki, biz fayl açmaq sonra nə planlaşdırırsınız nə dayanır. W, A, və A. - bu arqument üçün üç seçim vardır Biz fayl yazmaq istəyirəm, çünki Biz bu halda w seçtiniz. R, siz yəqin ki, təxmin edə bilərsiniz kimi, fayl oxumaq üçün edir. Və bir fayl eklenmesi üçün. Baxmayaraq w və faylları yazmaq üçün istifadə edilə bilər, həm də w fayl əvvəldən yazılı başlayacaq və potensial əvvəl saxlanılır ki, hər hansı bir məlumat üzerine. Mənim cari olaraq, artıq mövcud deyil, əgər biz açıq fayl, bizim indiki iş kataloqu yaradılmışdır. Lakin, biz fərqli bir yeri bir fayl daxil olmaq və ya yaratmaq istəyirsinizsə, fopen ilk dəlil olaraq, biz fayl adını əlavə bir fayl yolu belirtebilirsiniz. Bu prosesin birinci hissəsi uzun kodu yalnız bir xətt olsa bu xətləri bir toplusu, həmişə yaxşı təcrübə var bir fayl uğurla açdı və ya yaradılmış təmin edin. Fopen null döndürürse, biz proqramı ilə irəliləmək istəyirik deyil əməliyyat sisteminin yaddaş Əgər bu baş verə bilər və ya biz lazımi icazələri olmayan bir kataloq bir fayl açmaq üçün cəhd edin. Prosesinin bir hissəsi iki makina nin isə loop yer tutur. Biz, istifadəçi daxil almaq üçün bir CS50 kitabxana funksiyasından istifadə və onlar proqram çıxmaq istəmirəm fərz biz string almaq və fayl yazmaq funksiyası fputs istifadə edin. fputs biz fayl yazmaq üçün istifadə edə bilər bir çox funksiyaları yalnız biridir. Digər fwrite, fputc və hətta fprintf daxildir. Asılı olmayaraq xüsusi funksiyası biz olsa da, istifadə sona onların hamısı, onların arqumentlərini vasitəsilə bilmək lazımdır ən azı iki şey - nə yazılı lazımdır Ü yazılı və lazımdır. Bizim halda, giriş yazılı lazımdır ki, simli edir və fp biz yazılı olduğunuz üçün bizi istiqamətləndirir ki göstəricisidir. Bu proqram, bu prosesi çərçivəsində iki olduqca sadə deyil. Biz sadəcə istifadəçi bir string qəbul etdiyiniz və bizim fayl birbaşa əlavə az-to-no giriş qiymətləndirmə və ya təhlükəsizlik yoxlayır. Tez-tez, lakin hissəsi iki kodunuzu hissəsini təşkil edəcək. Biz fayl yaxın yerləşir Nəhayət, üç hissəsi, line 58 edir. Burada biz orijinal fayl göstərici fclose və keçmək çağırırıq. Sonrakı olaraq, biz Proqramın sonunda siqnalizasiya, sıfır geri. Və, bəli, bir hissəsi üç kimi sadə deyil. Nin faylları oxumaq üçün hərəkət edək. Geri kataloq biz printer.c adlı bir fayl var. Biz yalnız yaradılmış fayl ilə run edək - doc.txt. Bu proqram, adı təklif kimi, sadəcə fayl məzmunu bu keçdi çap edəcək. Və biz bunu var. Kodu xətlərinin biz əvvəllər yazılmış və doc.txt qeyd etdi. Salam. My name Jason edir. Əgər printer.c daxil biz dive, biz kodu bir çox biz yalnız typewriter.c vasitəsilə getdi nə benzer görürük. Biz fayl açılmışdır Həqiqətən line 22, biz fayl bağlıdır yerləşir və line 39, həm typewriter.c demək olar ki, eynidir, fopen ikinci arqument üçün Basın. Biz bir fayl oxu edirik bu zaman, biz w əvəzinə r seçmişik. Belə ki, ən prosesinin ikinci hissəsi diqqət edək. Line 35, bizim 4 loop ikinci şərt kimi, biz fgets zəng etmək əvvəl fputs üçün ortaq fəaliyyət göstərir. Biz üç arqumentlər bu vaxt. Ilk simli saxlanılır yerləşir simvol array üçün göstəricisidir. İkinci oxumaq üçün simvolların maksimal sayı. Və üçüncü biz çalışırıq olan fayl göstəricisidir. Siz fgets null qayıtdıqdan loop üçün bitir görəcəksiniz. Bu baş verə bilər ki, iki səbəb var. Birincisi, bir səhv meydana bilər. İkincisi, və daha çox, fayl sonu çatıb və heç bir daha çox karakter oxunub. Siz merak etdiyiniz halda, iki funksiya bizə imkan verir ki, mövcuddur hansı səbəbdən bu null göstərici səbəb olur. Və Təəccüblü deyil ki, onlar faylları ilə iş ilə var-ci ildən, the ferror funksiyası və feof funksiyası start məktubu f. həm Nəhayət, biz bağlamaq əvvəl, fayl funksiyası sonuna yaxın bir sürətli Qeyd ki, yalnız qeyd olunduğu kimi, feof kimi yazılmışdır. Tez-tez siz isə loops üçün tədricən faylları vasitəsilə yol oxumaq üçün istifadə özünüz tapa bilərsiniz. Bu faylları sonuna çatmaq sonra Beləliklə, bu loops son bir yol lazımdır. Fayl göstərici üzrə feof Zəng və doğru görmek üçün yoxlanılması yalnız bunu istəyirəm. Belə ki, vəziyyət (! Feof (fp)) ilə bir müddət loop bir mükəmməl uyğun həll kimi görünə bilər. Lakin, biz mətn faylı qalan bir xətti deyirlər. Biz isə loop daxil olacaq və planlaşdırıldığı kimi hər şeyi işləyəcək. Vasitəsilə növbəti dəyirmi, bizim proqram, fp və feof doğru olmadığını kontrol edəcək amma - və burada anlamaq üçün mühüm nöqtəsi - yalnız hələ doğru olmayacaq. Feof məqsədi yoxlamaq üçün deyil, çünki ki, bir oxumaq funksiyası növbəti zəng fayl sonunda təşkil edəcək, əgər deyil, fayl sonunda artıq əldə olunub və ya yoxlamaq. Bu nümunə halda, bizim faylı keçən xətt oxu mükəmməl rəvan gedir, ancaq proqram hələ biz fayl sonunda təşkil etdik ki, bilmir. Bir əlavə oxu nə qədər deyil bu counters fayl sonunda edir. Belə ki, düzgün vəziyyəti aşağıdakı kimi olacaqdır: fgets və onun arqumentlərini - çıxış, məhsulun ölçüsü və fp - və bərabər bütün null üçün. Bu, biz printer.c götürüb yanaşma deyil və bu halda, loop çıxışları sonra, siz feof ya ferror bu loop mövcud üçün xüsusi əsaslandırıcı üçün istifadəçi məlumat zəng edə bilər. Yazılı və bir faylı oxuma, ən əsas da ki, sadə 3-hissə prosesi. Birincisi, faylı açın. İkincisi, biz fayla bəzi şeylər qoymaq və ya həyata bəzi şeylər edir. Üçüncüsü, biz fayl bağlayın. Ilk və son hissələri asandır. The çətin stuff yerləşir Ü orta hissəsidir. Və baxmayaraq başlıq altında biz həmişə adet sıfır və olanları uzun ardıcıllığı ilə məşğul olduğunuz abstraksiya bir qat əlavə etmək üçün kodlama zaman kömək edir daha yaxından biz görməyə istifadə etdiyiniz bənzəyir ki, bir şey daxil ardıcıllıqla çevrilir. Məsələn, bir 24-bit bitmap fayl çalışırıq, əgər biz güman oxu və ya bir zamanda üç bytes yazılı olacaq. Olan halda, müəyyən və müvafiq ad mənada edəcək 3 bytes böyük bir struct. Faylları ilə iş mürəkkəb görünə bilər baxmayaraq, onlara istifadə bizi həqiqətən əlamətdar bir şeylər etməyə imkan verir. Biz proqram xaricində dünyanın dövlət dəyişə bilərsiniz biz proqramı həyat kənarda yaşayır ki, bir şey yarada və ya biz hətta bizim proqram çalışan açılmış əvvəl yaradılmış bir şey dəyişə bilərsiniz. Faylları ilə əlaqə C. proqramlaşdırma həqiqətən güclü hissəsi və sizə gələcək kodu ilə yaratmaq olacaq nə görmək üçün bir heyecan oldum. My name Jason Hirschhorn edir. Bu CS50 edir. [CS50.TV] [Gülüş] Okay. Biri edir. Burada getmək. Biz bir fayl hesab zaman - >> Oh, gözləyin. Bağışlayın. [Gülüş] Okay. Orada Hey. Biz bir fayl hesab zaman - Bir fayl hesab zaman - Okay. Hazır olduğunuzda, mənə deyin. Oh, böyük. Bir teleprompter dən oxumaq baxmayaraq görünə bilər - no. Mənim pis.