1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Fayl I / O] 2 00:00:02,000 --> 00:00:04,000 [Jason Hirschhorn, Harvard Universiteti] 3 00:00:04,000 --> 00:00:07,000 [Bu, CS50.TV CS50 edir] 4 00:00:07,000 --> 00:00:11,000 Biz bir fayl hesab zaman, nə, bir Microsoft Word sənəd ağla 5 00:00:11,000 --> 00:00:14,000 JPEG image və ya MP3 mahnı, 6 00:00:14,000 --> 00:00:17,000 və biz müxtəlif yollarla bu cür faylları hər biri ilə qarşılıqlı. 7 00:00:17,000 --> 00:00:20,000 Məsələn, bir Word sənəd, biz mətn əlavə 8 00:00:20,000 --> 00:00:24,000 JPEG image ilə biz kənarları həyata məhsul və ya rəng retuş bilər isə. 9 00:00:24,000 --> 00:00:28,000 Lakin başlıq altında kompüter faylları bütün bir şey var 10 00:00:28,000 --> 00:00:31,000 adet sıfır və olanları uzun bir ardıcıllıqla deyil. 11 00:00:31,000 --> 00:00:33,000 Bu fayl ilə əməkdaşlıq xüsusi proqram var 12 00:00:33,000 --> 00:00:38,000 Bu uzun ardıcıllıqla emal və istifadəçi təqdim necə qərar verəcək. 13 00:00:38,000 --> 00:00:41,000 Bir tərəfdən, bir sənəd, yalnız bir byte baxmaq bilər 14 00:00:41,000 --> 00:00:45,000 ya 8 adet sıfır və olanları və ekranda bir ASCII xarakter göstərilir. 15 00:00:45,000 --> 00:00:48,000 Digər tərəfdən, bir bitmap image, 3 bytes baxmaq bilər 16 00:00:48,000 --> 00:00:50,000 və ya 24 adet sıfır və olanları 17 00:00:50,000 --> 00:00:53,000 və 3 hexadecimal nömrələri kimi şərh 18 00:00:53,000 --> 00:00:56,000 ki, qırmızı, yaşıl və mavi üçün dəyərlər təmsil 19 00:00:56,000 --> 00:00:58,000 bir şəkil bir pixel edir. 20 00:00:58,000 --> 00:01:01,000 Nə olursa olsun onlar əsas da, ekranda kimi görünə bilər 21 00:01:01,000 --> 00:01:05,000 faylları adet sıfır və olanları bir ardıcıllıqla daha çox heç bir şey var. 22 00:01:05,000 --> 00:01:08,000 Belə edək dalış və biz, həqiqətən, bu adet sıfır və olanları manipulyasiya necə baxmaq 23 00:01:08,000 --> 00:01:12,000 bu yazı və bir faylı oxu gəldiyi zaman. 24 00:01:12,000 --> 00:01:15,000 >> Mən bir sadə 3-hissə prosesinə aşağı qırılma ilə başlamaq lazımdır. 25 00:01:15,000 --> 00:01:19,000 Sonra, bu üç hissədən göstərir ki, iki kodu nümunələri daxil dalış lazımdır. 26 00:01:19,000 --> 00:01:23,000 Nəhayət, mən prosesi nəzərdən və onun ən mühüm məlumat bəzi lazımdır. 27 00:01:23,000 --> 00:01:25,000 Kimi masaüstünüzde oturur hər hansı bir fayl ilə, 28 00:01:25,000 --> 00:01:28,000 etmək üçün ilk şey açmaq üçün. 29 00:01:28,000 --> 00:01:31,000 C biz təyin struct bir pointer bildirərək bunu 30 00:01:31,000 --> 00:01:33,000 ki, disk bir fayl təmsil edir. 31 00:01:33,000 --> 00:01:38,460 Bu funksiya zəng, biz də yaza və ya faylı oxuya qərar. 32 00:01:38,460 --> 00:01:41,660 Sonra, biz faktiki oxu və yazı yoxdur. 33 00:01:41,660 --> 00:01:44,800 Biz bu hissəsində istifadə edə bilərsiniz ixtisaslaşdırılmış funksiyaların bir sıra var 34 00:01:44,800 --> 00:01:48,790 və demək olar ki, hamısı fayl duran məktubu F ilə başlayır. 35 00:01:48,790 --> 00:01:53,560 Son faylları üst küncündə kiçik qırmızı X yaxın, kompüter açmaq 36 00:01:53,560 --> 00:01:56,680 biz bir final funksiyası zəng ilə fayl bağlayın. 37 00:01:56,680 --> 00:01:59,540 İndi biz nə olacaq nə ümumi bir fikir var ki, 38 00:01:59,540 --> 00:02:02,000 kodu daxil dive edək. 39 00:02:02,000 --> 00:02:06,100 >> Bu kataloq, biz iki C faylları və onların müvafiq çalıştırılabilir fayllar var. 40 00:02:06,100 --> 00:02:09,710 The makina proqram, bir command line mübahisə edir 41 00:02:09,710 --> 00:02:12,060 biz yaratmaq istəyirik sənədin adı. 42 00:02:12,060 --> 00:02:16,160 Bu halda, biz doc.txt zəng edəcəyik. 43 00:02:16,160 --> 00:02:19,080 Nin proqram run və xətləri bir neçə daxil edək. 44 00:02:19,080 --> 00:02:23,660 Salam. My name Jason edir. 45 00:02:23,660 --> 00:02:26,710 Nəhayət, "çıxın." Yazın lazımdır 46 00:02:26,710 --> 00:02:29,720 Indi bu directory bütün faylları siyahısını edin 47 00:02:29,720 --> 00:02:33,770 biz yeni bir sənəd doc.txt deyilən mövcud olduğunu görürük. 48 00:02:34,190 --> 00:02:36,110 Fayl yalnız yaradılan bu proqram var. 49 00:02:36,110 --> 00:02:40,520 Əlbəttə, bu çox adet sıfır və olanları uzun bir ardıcıllıqla başqa bir şey deyil. 50 00:02:41,100 --> 00:02:43,260 Bu yeni fayl açmaq varsa, 51 00:02:43,260 --> 00:02:45,870 biz proqram daxil kod 3 hat bax - 52 00:02:46,060 --> 00:02:49,060 Salam. May adı Jason edir. 53 00:02:49,580 --> 00:02:52,090 Amma nə həqiqətən typewriter.c çalıştırıldığında olub? 54 00:02:52,810 --> 00:02:55,520 Bizim üçün maraq ilk line line 24. 55 00:02:55,560 --> 00:02:58,490 Bu xətt, biz fayl göstərici bəyan edir. 56 00:02:59,080 --> 00:03:03,140 Bu göstərici, fopen qaytarır ki, funksiyası, iki dəlilləri edir. 57 00:03:03,140 --> 00:03:07,440 Ilk fayl uzantısı müvafiq hallarda, o cümlədən fayl adı. 58 00:03:07,440 --> 00:03:10,980 Bir fayl uzantısı ən aşağı səviyyədə fayl təsir etmir Xatırladaq ki,. 59 00:03:10,980 --> 00:03:14,640 Biz həmişə adet sıfır və olanları uzun ardıcıllığı ilə məşğul olursunuz. 60 00:03:14,640 --> 00:03:19,630 Lakin bu faylları təfsir və nə applications onları açmaq üçün istifadə olunur necə təsir edir. 61 00:03:19,630 --> 00:03:22,290 Fopen ikinci arqument bir məktub 62 00:03:22,290 --> 00:03:25,300 ki, biz fayl açmaq sonra nə planlaşdırırsınız nə dayanır. 63 00:03:25,300 --> 00:03:30,630 W, A, və A. - bu arqument üçün üç seçim vardır 64 00:03:30,630 --> 00:03:34,900 Biz fayl yazmaq istəyirəm, çünki Biz bu halda w seçtiniz. 65 00:03:34,900 --> 00:03:38,820 R, siz yəqin ki, təxmin edə bilərsiniz kimi, fayl oxumaq üçün edir. 66 00:03:38,820 --> 00:03:41,760 Və bir fayl eklenmesi üçün. 67 00:03:41,760 --> 00:03:44,960 Baxmayaraq w və faylları yazmaq üçün istifadə edilə bilər, həm də 68 00:03:44,960 --> 00:03:47,460 w fayl əvvəldən yazılı başlayacaq 69 00:03:47,460 --> 00:03:50,810 və potensial əvvəl saxlanılır ki, hər hansı bir məlumat üzerine. 70 00:03:50,810 --> 00:03:54,070 Mənim cari olaraq, artıq mövcud deyil, əgər biz açıq fayl, 71 00:03:54,070 --> 00:03:57,180 bizim indiki iş kataloqu yaradılmışdır. 72 00:03:57,180 --> 00:04:00,540 Lakin, biz fərqli bir yeri bir fayl daxil olmaq və ya yaratmaq istəyirsinizsə, 73 00:04:00,540 --> 00:04:02,650 fopen ilk dəlil olaraq, 74 00:04:02,650 --> 00:04:05,840 biz fayl adını əlavə bir fayl yolu belirtebilirsiniz. 75 00:04:05,840 --> 00:04:09,490 Bu prosesin birinci hissəsi uzun kodu yalnız bir xətt olsa 76 00:04:09,490 --> 00:04:12,350 bu xətləri bir toplusu, həmişə yaxşı təcrübə var 77 00:04:12,350 --> 00:04:15,930 bir fayl uğurla açdı və ya yaradılmış təmin edin. 78 00:04:15,930 --> 00:04:20,300 Fopen null döndürürse, biz proqramı ilə irəliləmək istəyirik deyil 79 00:04:20,300 --> 00:04:23,270 əməliyyat sisteminin yaddaş Əgər bu baş verə bilər 80 00:04:23,270 --> 00:04:27,940 və ya biz lazımi icazələri olmayan bir kataloq bir fayl açmaq üçün cəhd edin. 81 00:04:27,940 --> 00:04:31,780 >> Prosesinin bir hissəsi iki makina nin isə loop yer tutur. 82 00:04:31,780 --> 00:04:35,000 Biz, istifadəçi daxil almaq üçün bir CS50 kitabxana funksiyasından istifadə 83 00:04:35,000 --> 00:04:37,190 və onlar proqram çıxmaq istəmirəm fərz 84 00:04:37,190 --> 00:04:41,940 biz string almaq və fayl yazmaq funksiyası fputs istifadə edin. 85 00:04:41,940 --> 00:04:46,700 fputs biz fayl yazmaq üçün istifadə edə bilər bir çox funksiyaları yalnız biridir. 86 00:04:46,700 --> 00:04:51,920 Digər fwrite, fputc və hətta fprintf daxildir. 87 00:04:51,920 --> 00:04:54,840 Asılı olmayaraq xüsusi funksiyası biz olsa da, istifadə sona 88 00:04:54,840 --> 00:04:57,480 onların hamısı, onların arqumentlərini vasitəsilə bilmək lazımdır 89 00:04:57,480 --> 00:04:59,670 ən azı iki şey - 90 00:04:59,670 --> 00:05:03,140 nə yazılı lazımdır Ü yazılı və lazımdır. 91 00:05:03,140 --> 00:05:07,240 Bizim halda, giriş yazılı lazımdır ki, simli edir 92 00:05:07,240 --> 00:05:11,290 və fp biz yazılı olduğunuz üçün bizi istiqamətləndirir ki göstəricisidir. 93 00:05:11,290 --> 00:05:15,330 Bu proqram, bu prosesi çərçivəsində iki olduqca sadə deyil. 94 00:05:15,330 --> 00:05:17,360 Biz sadəcə istifadəçi bir string qəbul etdiyiniz 95 00:05:17,360 --> 00:05:22,120 və bizim fayl birbaşa əlavə az-to-no giriş qiymətləndirmə və ya təhlükəsizlik yoxlayır. 96 00:05:22,120 --> 00:05:26,160 Tez-tez, lakin hissəsi iki kodunuzu hissəsini təşkil edəcək. 97 00:05:26,160 --> 00:05:30,580 Biz fayl yaxın yerləşir Nəhayət, üç hissəsi, line 58 edir. 98 00:05:30,580 --> 00:05:34,860 Burada biz orijinal fayl göstərici fclose və keçmək çağırırıq. 99 00:05:34,860 --> 00:05:39,500 Sonrakı olaraq, biz Proqramın sonunda siqnalizasiya, sıfır geri. 100 00:05:39,500 --> 00:05:42,630 Və, bəli, bir hissəsi üç kimi sadə deyil. 101 00:05:42,630 --> 00:05:45,260 >> Nin faylları oxumaq üçün hərəkət edək. 102 00:05:45,260 --> 00:05:48,220 Geri kataloq biz printer.c adlı bir fayl var. 103 00:05:48,220 --> 00:05:50,910 Biz yalnız yaradılmış fayl ilə run edək - 104 00:05:50,910 --> 00:05:53,350 doc.txt. 105 00:05:53,350 --> 00:05:58,150 Bu proqram, adı təklif kimi, sadəcə fayl məzmunu bu keçdi çap edəcək. 106 00:05:58,150 --> 00:06:00,230 Və biz bunu var. 107 00:06:00,230 --> 00:06:03,780 Kodu xətlərinin biz əvvəllər yazılmış və doc.txt qeyd etdi. 108 00:06:03,780 --> 00:06:06,980 Salam. My name Jason edir. 109 00:06:06,980 --> 00:06:09,120 Əgər printer.c daxil biz dive, 110 00:06:09,120 --> 00:06:13,570 biz kodu bir çox biz yalnız typewriter.c vasitəsilə getdi nə benzer görürük. 111 00:06:13,570 --> 00:06:16,720 Biz fayl açılmışdır Həqiqətən line 22, 112 00:06:16,720 --> 00:06:19,220 biz fayl bağlıdır yerləşir və line 39, 113 00:06:19,220 --> 00:06:23,890 həm typewriter.c demək olar ki, eynidir, fopen ikinci arqument üçün Basın. 114 00:06:23,890 --> 00:06:26,510 Biz bir fayl oxu edirik bu zaman, 115 00:06:26,510 --> 00:06:29,040 biz w əvəzinə r seçmişik. 116 00:06:29,040 --> 00:06:31,950 Belə ki, ən prosesinin ikinci hissəsi diqqət edək. 117 00:06:31,950 --> 00:06:36,060 Line 35, bizim 4 loop ikinci şərt kimi, 118 00:06:36,060 --> 00:06:38,590 biz fgets zəng etmək 119 00:06:38,590 --> 00:06:42,190 əvvəl fputs üçün ortaq fəaliyyət göstərir. 120 00:06:42,190 --> 00:06:44,660 Biz üç arqumentlər bu vaxt. 121 00:06:44,660 --> 00:06:48,810 Ilk simli saxlanılır yerləşir simvol array üçün göstəricisidir. 122 00:06:48,810 --> 00:06:52,670 İkinci oxumaq üçün simvolların maksimal sayı. 123 00:06:52,670 --> 00:06:56,010 Və üçüncü biz çalışırıq olan fayl göstəricisidir. 124 00:06:56,010 --> 00:07:00,780 Siz fgets null qayıtdıqdan loop üçün bitir görəcəksiniz. 125 00:07:00,780 --> 00:07:02,940 Bu baş verə bilər ki, iki səbəb var. 126 00:07:02,940 --> 00:07:05,380 Birincisi, bir səhv meydana bilər. 127 00:07:05,380 --> 00:07:10,740 İkincisi, və daha çox, fayl sonu çatıb və heç bir daha çox karakter oxunub. 128 00:07:10,740 --> 00:07:14,040 Siz merak etdiyiniz halda, iki funksiya bizə imkan verir ki, mövcuddur 129 00:07:14,040 --> 00:07:17,160 hansı səbəbdən bu null göstərici səbəb olur. 130 00:07:17,160 --> 00:07:21,090 Və Təəccüblü deyil ki, onlar faylları ilə iş ilə var-ci ildən, 131 00:07:21,090 --> 00:07:26,940 the ferror funksiyası və feof funksiyası start məktubu f. həm 132 00:07:26,940 --> 00:07:32,130 >> Nəhayət, biz bağlamaq əvvəl, fayl funksiyası sonuna yaxın bir sürətli Qeyd 133 00:07:32,130 --> 00:07:36,690 ki, yalnız qeyd olunduğu kimi, feof kimi yazılmışdır. 134 00:07:36,690 --> 00:07:41,550 Tez-tez siz isə loops üçün tədricən faylları vasitəsilə yol oxumaq üçün istifadə özünüz tapa bilərsiniz. 135 00:07:41,550 --> 00:07:45,790 Bu faylları sonuna çatmaq sonra Beləliklə, bu loops son bir yol lazımdır. 136 00:07:45,790 --> 00:07:50,510 Fayl göstərici üzrə feof Zəng və doğru görmek üçün yoxlanılması 137 00:07:50,510 --> 00:07:52,310 yalnız bunu istəyirəm. 138 00:07:52,310 --> 00:07:59,820 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. 139 00:07:59,820 --> 00:08:03,770 Lakin, biz mətn faylı qalan bir xətti deyirlər. 140 00:08:03,770 --> 00:08:07,130 Biz isə loop daxil olacaq və planlaşdırıldığı kimi hər şeyi işləyəcək. 141 00:08:07,130 --> 00:08:12,750 Vasitəsilə növbəti dəyirmi, bizim proqram, fp və feof doğru olmadığını kontrol edəcək 142 00:08:12,750 --> 00:08:15,430 amma - və burada anlamaq üçün mühüm nöqtəsi - 143 00:08:15,430 --> 00:08:17,770 yalnız hələ doğru olmayacaq. 144 00:08:17,770 --> 00:08:21,110 Feof məqsədi yoxlamaq üçün deyil, çünki ki, 145 00:08:21,110 --> 00:08:24,400 bir oxumaq funksiyası növbəti zəng fayl sonunda təşkil edəcək, əgər 146 00:08:24,400 --> 00:08:28,190 deyil, fayl sonunda artıq əldə olunub və ya yoxlamaq. 147 00:08:28,190 --> 00:08:30,140 Bu nümunə halda, 148 00:08:30,140 --> 00:08:32,780 bizim faylı keçən xətt oxu mükəmməl rəvan gedir, 149 00:08:32,780 --> 00:08:36,210 ancaq proqram hələ biz fayl sonunda təşkil etdik ki, bilmir. 150 00:08:36,210 --> 00:08:40,549 Bir əlavə oxu nə qədər deyil bu counters fayl sonunda edir. 151 00:08:40,549 --> 00:08:43,210 Belə ki, düzgün vəziyyəti aşağıdakı kimi olacaqdır: 152 00:08:43,210 --> 00:08:49,330 fgets və onun arqumentlərini - çıxış, məhsulun ölçüsü və fp - 153 00:08:49,330 --> 00:08:52,570 və bərabər bütün null üçün. 154 00:08:52,570 --> 00:08:55,260 Bu, biz printer.c götürüb yanaşma deyil 155 00:08:55,260 --> 00:08:57,890 və bu halda, loop çıxışları sonra, 156 00:08:57,890 --> 00:09:04,290 siz feof ya ferror bu loop mövcud üçün xüsusi əsaslandırıcı üçün istifadəçi məlumat zəng edə bilər. 157 00:09:04,290 --> 00:09:08,100 >> Yazılı və bir faylı oxuma, ən əsas da ki, 158 00:09:08,100 --> 00:09:10,150 sadə 3-hissə prosesi. 159 00:09:10,150 --> 00:09:12,530 Birincisi, faylı açın. 160 00:09:12,530 --> 00:09:16,740 İkincisi, biz fayla bəzi şeylər qoymaq və ya həyata bəzi şeylər edir. 161 00:09:16,740 --> 00:09:19,200 Üçüncüsü, biz fayl bağlayın. 162 00:09:19,200 --> 00:09:21,170 Ilk və son hissələri asandır. 163 00:09:21,170 --> 00:09:23,920 The çətin stuff yerləşir Ü orta hissəsidir. 164 00:09:23,920 --> 00:09:27,760 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 165 00:09:27,760 --> 00:09:30,710 abstraksiya bir qat əlavə etmək üçün kodlama zaman kömək edir 166 00:09:30,710 --> 00:09:35,350 daha yaxından biz görməyə istifadə etdiyiniz bənzəyir ki, bir şey daxil ardıcıllıqla çevrilir. 167 00:09:35,350 --> 00:09:39,570 Məsələn, bir 24-bit bitmap fayl çalışırıq, əgər 168 00:09:39,570 --> 00:09:43,290 biz güman oxu və ya bir zamanda üç bytes yazılı olacaq. 169 00:09:43,290 --> 00:09:46,450 Olan halda, müəyyən və müvafiq ad mənada edəcək 170 00:09:46,450 --> 00:09:48,980 3 bytes böyük bir struct. 171 00:09:48,980 --> 00:09:51,410 >> Faylları ilə iş mürəkkəb görünə bilər baxmayaraq, 172 00:09:51,410 --> 00:09:54,530 onlara istifadə bizi həqiqətən əlamətdar bir şeylər etməyə imkan verir. 173 00:09:54,530 --> 00:09:58,880 Biz proqram xaricində dünyanın dövlət dəyişə bilərsiniz 174 00:09:58,880 --> 00:10:01,730 biz proqramı həyat kənarda yaşayır ki, bir şey yarada 175 00:10:01,730 --> 00:10:07,190 və ya biz hətta bizim proqram çalışan açılmış əvvəl yaradılmış bir şey dəyişə bilərsiniz. 176 00:10:07,190 --> 00:10:11,210 Faylları ilə əlaqə C. proqramlaşdırma həqiqətən güclü hissəsi 177 00:10:11,210 --> 00:10:15,300 və sizə gələcək kodu ilə yaratmaq olacaq nə görmək üçün bir heyecan oldum. 178 00:10:15,300 --> 00:10:19,770 My name Jason Hirschhorn edir. Bu CS50 edir. 179 00:10:19,770 --> 00:10:21,770 [CS50.TV] 180 00:10:21,770 --> 00:10:25,940 >> [Gülüş] 181 00:10:25,940 --> 00:10:29,330 Okay. Biri edir. Burada getmək. 182 00:10:49,000 --> 00:10:52,140 Biz bir fayl hesab zaman - >> Oh, gözləyin. Bağışlayın. 183 00:10:52,140 --> 00:10:56,800 [Gülüş] Okay. 184 00:11:06,620 --> 00:11:09,970 Orada Hey. 185 00:11:13,670 --> 00:11:16,310 Biz bir fayl hesab zaman - 186 00:11:17,610 --> 00:11:20,710 Bir fayl hesab zaman - Okay. Hazır olduğunuzda, mənə deyin. 187 00:11:20,710 --> 00:11:22,520 Oh, böyük. 188 00:11:22,520 --> 00:11:26,180 Bir teleprompter dən oxumaq baxmayaraq görünə bilər - no. Mənim pis.