[MUSIC پخش] ZAMYLA CHAN: بیایید مقابله بهبود می یابند. بازیابی احتمالا PSET مورد علاقه من، و عمدتا به دلیل من فکر می کنم آن را واقعا، واقعا سرد. در واقع، شما یک حافظه داده شده است در حال فایل کارت است که در آن تصاویر حذف شده. اما آنچه شما به انجام شده است بهبود می یابند همه آنها را. OK. پس از آن واقعا هیجان انگیز است، اما شاید کمی تهدید آمیز است، چون تو با توجه به یک فایل خالی C و شما باید آن را وارد را پر کنید OK، بنابراین اجازه دهید این شکستن به بخش های قابل مدیریت. شما می خواهید برای باز کردن فایل کارت حافظه است. که به اندازه کافی ساده به نظر می رسد. سپس، پیدا کردن ابتدا از یک تصویر JPG. تمام فایل ها بر روی این حافظه کارت رفتن به JPGs. سپس، هنگامی که شما در پیدا کردن آغاز، شما به باز کردن یک JPG جدید، که است، مانند، ایجاد یک JPG، و ارسال 512 بایت در یک زمان تا زمانی که JPG جدید است یافت، و پایان دادن به این برنامه، یک بار شما در پایان فایل را تشخیص دهد. مراحل پس اول اول برای باز کردن فایل کارت حافظه است. اما می دانید در حال حاضر، و وجود دارد یک فایل عملکرد I / O که رفتن به ثابت بسیار مفید است. OK. پس چه JPGs است؟ از آنجا که ما به شروع به آن نیاز دارید. خوب، JPGs، درست مثل نقشه بیتی، فقط دنباله ای از بایت ها می باشد. خوشبختانه، هر JPG با هر دو شروع می شود 0XFF، 0xd8، 0XFF، 0xe0، یک دنباله از بایت، و یا دیگر دنباله ای از بایت. پس آن چهار کلمه در ادامه متن نشان می دهد شروع یک JPG. هیچ یک دیگر از آن دو ترکیب از چهار بایت. و خوشبختانه برای ما، حقیقت دیگری است که ما می توانید از امکان استفاده این است که هر JPG ذخیره شده است جانبی توسط سمت در کارت حافظه. I ساختار نشان داده ام کارت حافظه شماتیک در این اسلاید اینجا. در اینجا، هر مربع، هر مستطیل، نشان دهنده 512 بایت، و آن شروع می شود با خاکستری که ما نمی واقعا JPG داشته باشد. اما پس از آن ما در نهایت ضربه یک بلوک با یک ستاره. این بدان معنی است که چهار بایت اول از از این 512 در یکی از این دو با شروع سلسله ای از JPG. و ما را از وجود دارد، و پس از آن یک بار یکی از JPG به پایان می رسد، یک بعدی شروع می شود. ما هرگز بیشتر دارند فضای خاکستری در میان. اما چگونه ما در واقع به عنوان خوانده شده این، و خواندن 512 کلمه در ادامه متن به طوری که ما می توانیم مقایسه وهله اول؟ خوب، اجازه بازگشت به از fread، که طول می کشد در ساختار که شامل خواهد شد کلمه در ادامه متن است که شما در حال خواندن. بنابراین شما به قرار کسانی که در آن وجود دارد - اندازه، تعداد، و پس از آن inpointer که شما را از خواندن. در حال حاضر، ما می خواهیم به عنوان خوانده شده 512 در یک زمان، و ما می خواهیم برای ذخیره این در یک بافر، من قصد دارم به آن تماس بگیرید. در واقع، ما قصد داریم به نگه بر روی آن 512 بایت و انجام همه چیز با آن، درست است؟ ما هر دو در حال رفتن به مقایسه اول چهار بایت، و یا ما قصد داریم به خواندن آن را در، OK؟ پس اشاره گر داده خواهد شد و سپس به عنوان بافر خود را، و inpointer، خوب، که فقط رفتن به کارت حافظه خود. برگشت به طرح کلی کارت حافظه است. ما قصد داریم به عنوان خوانده شده 512 بایت در یک زمان، ذخیره هر بلوک 512 بایت به یک بافر، برگزاری بر روی آن بافر، آن 512 بایت، تا زمانی که ما می دانیم دقیقا همان چیزی است که آنها را انجام دهد. پس از شروع هر چیزی نیست، بنابراین ما از بافر به خواندن، مقایسه آن، و ما نمی خواهد نیاز به انجام هر کاری با آن. و پس از آن، ما در نهایت به یک ستاره مسدود کردن، به این معنی که ما اولین JPG ما در بر داشت. بنابراین بافر اکنون دارند از آن JPG کلمه در ادامه متن. دفعه بعد 512 بایت، زیرا آنها یک قطعه ستاره، نیز می باشد بخشی از آن JPG. و JPGs مداوم از وجود دارد در در، تا زمانی که ما به JPG بعدی. و پس از آن بافر و سپس نگه می دارد 512 بایت که برای JPG، و به همین ترتیب، و غیره. OK. بنابراین زمانی که روی اولین ستاره دار بلوک، اولین JPG، چگونه شما انجام دهد در واقع، به خوبی، آن را باز کنید؟ بیایید یک JPG جدید. نام فایل برای JPG در حال رفتن به در قالب است، شماره، شماره، number.jpg، در که آنها در به نام نظم که در آن هستند در بر داشت، با شروع از 0. بنابراین JPG برای اولین بار شما است که پیدا کردن 000.jpg خواهد شد. بنابراین، احتمالا ایده خوبی برای پیگیری که چگونه بسیاری از JPGs شما تا کنون در بر داشت. به طوری که نام فایل است. اما چگونه می توانم در واقع شما را که؟ خوب، ما قصد داریم به استفاده از تابع sprintf. کمی شبیه به چون printf، که در آن شما می توانید متغیرهایی برای رشته ها استفاده کنید، به جز در این مورد، sprintf چاپ فایل را به جریان دایرکتوری، نه به ترمینال. OK. بنابراین در اینجا ما می بینیم که ما باید عنوان، یک آرایه کاراکتر است که ذخیره رشته برآیند، و ما در عبور عنوان رشته واقعی با مکان نگه دار، فقط ما دوست داریم ام یاد گرفتم که با چون printf. اما این کدی که من در اینجا خواهد 2.JPG، نه 002.JPG دهد. پس من به شما می رود برای پیدا کردن چگونه به تغییر مکان نگه دار تا نام درست. OK. بنابراین هنگامی که شما پس از آن sprintf'd ام که شما می توانید باز کردن آن فایل، به این دلیل که وجود دارد در دایرکتوری خود را، با fopen، با استفاده از عنوان، و پس از آن هر حالت شما می خواهید برای باز کردن آن فایل شوید بنابراین در حال حاضر که ما یک فایل JPG جدید باز کرده ام، در حال حاضر ما می تواند 512 بایت در یک ارسال زمان، تا زمانی که JPG جدید پیدا شده است. بنابراین اجازه دهید نگاهی دیگر نگاه در نحو از fwrite. من می دانم که من نشان دادن این اسلاید زیادی است، اما من فقط می خواهم مطمئن شوید که شما بچه ها می کنید بیش از حد اشتباه گرفته، چرا که من می دانم که آن را بسیار آسان به مخلوط کردن اولین و آخرین بحث، به طور خاص. اما به یاد داشته باشید که شما را از نوشتن بافر خود را به فایل از. حالا که شما می دانید که چگونه نوشتن 512 کلمه در ادامه متن را به فایل JPG خود را که شما ایجاد، خوب، ما می خواهیم برای متوقف کردن آن پروسه زمانی که ما از پایان رسیده ام کارت های ما، به دلیل وجود نخواهد داشت هر گونه تصاویر بیشتر یافت می شود. بنابراین اجازه دهید به عقب برویم به از fread یک بار دیگر، قول می دهم. از fread می گرداند مورد که چگونه بسیاری از اندازه، اندازه، آماده در موفقیت بود. در حالت ایده آل، این است که برای رفتن به هر عبور شما را در تعداد، درست است؟ از آنجا که شما در حال تلاش برای به عنوان خوانده شده تعداد از عناصر از اندازه، اندازه. اما اگر از fread است قادر به خواندن که نه تعداد عناصر، سپس آن را بازگشت هر چه تعداد آن را بخوانید با موفقیت. در حال حاضر، یک چیز مهم است به یاد داشته باشید که اگر شما استفاده از یک فایل دیگر I / O تابع مانند fgetc، آن را نیز بر می گردیم چگونه بسیاری از موارد آن را با موفقیت به عنوان خوانده شده. چه در مورد این تابع مفید است که اگر شما استفاده از توابع درون یک شرایط، آن را خود به خود در حالی که اجرا تعیین کننده است که شرایط است که فقط واقعا مفید است. بنابراین اگر شما در این شرایط، می گویند، اگر بافر از fread، DOG sizeof، 2، اشاره گر، برابر است با مقدار 1 است که بدان معنی است که من می خواهم به عنوان خوانده شده 2 سگ در آن زمان. اما اگر از fread می گرداند 1 به جای 2 انتظار می رود، که بدان معنی است که 2 وجود دارد سگ در فایل سمت چپ من، اما نه 1. اما اگر آن را می گرداند 2، پس من هنوز هم کسانی که 2 سگ در داخل بافر من. بنابراین در حال حاضر است که به شما احساس چگونه به برای پایان فایل را بررسی کنید، اما اجازه دهید از هم اکنون منطق بروید. چگونه ما در واقع قطعه تمام از این عناصر با هم؟ هنگامی که ما به اولین JPG ما، از ما می دانیم که JPGs ذخیره می شوند contiguously، ما خواهید بود تا نوشتن ما به انتهای فایل کارت. اما ما نمی خواهیم به ارسال هر چیزی که تا آن زمان. پس از آن اهمیت دارد، نه تنها که ما در هستی شروع یک JPG جدید، اما آیا ما در حال حاضر در بر داشت JPG یا نه. اگر این شروع یک JPG جدید است، ما می خواهید برای بستن فایل JPG فعلی ما اگر ما باید یک باز، و باز یکی از جدید به ارسال به. اگر آن را از آغاز JPG جدید نیست، هر چند، ما فایل JPG همان نگه داشتن باز کردن و نوشتن به آن. ما به بافر ما را به هر کدام ارسال فایل JPG ما باز، به شرطی که ما باید یک باز است، البته. اگر ما اولین JPG ما یافت نشد در عین حال، ما هیچ چیز را ارسال نمی کند. و این روند تا زمانی که شما ادامه می دهد رسیدن به انتهای فایل کارت. و در نهایت، شما می خواهید به اطمینان حاصل کنید که هر شما fclose فایل های که شما fopened ام. هنگامی که شما راحت با هستی مفاهیم، ​​نگاهی به برخی از شبه، که من در اینجا گنجانده شده است. اول، شما می خواهید برای باز کردن فایل کارت، و سپس مراحل زیر را تکرار تا زمانی که شما رسیده ام پایان کارت. شما می خواهید به عنوان خوانده شده 512 بایت به یک بافر شده است. با استفاده از این بافر، شما می خواهید برای بررسی آیا شما در شروع یک هستید JPG جدید یا نه. و پاسخ به این سوال خواهد شد تحت تاثیر قرار مدیریت فایل خود را - که فایل ها را باز می کنید، که آنهایی که می توانم به شما نزدیک است. سپس، شما در حال حاضر در بر داشت JPG؟ چگونه شما را نگه آهنگ از که؟ پس از آن، بسته به نوع آن، شما هم می خواهید ارسال به JPG فعلی است که شما باز، و یا ارسال آن را در همه نیست، چون شما یک JPG یافت نشده است. در نهایت، هنگامی که شما به پایان رسیده فایل، شما می خواهید برای بستن هر باقی مانده فایل هایی که شما باز شود. ما می خواهیم مرتب در اینجا. و با آن، شما همه از بهبود کرده ام فایل های از دست رفته از حافظه کارت است، که یک شاهکار بسیار شگفت انگیز است. بنابراین خود را در پشت پت. اما، یک عنصر بیشتر به وجود دارد PSET، که مسابقه. شما باید دریابید که تمام عکس ها که شما بهبود کرده ام در واقع تصاویر از کارکنان CS50 است. بنابراین اگر شما در محوطه دانشگاه و یا در جایی هستید در نزدیکی، سپس شما می توانید تصاویر را با را کارکنان و بخش است که اکثر تصاویر با کارکنان از فایل های بهبود خود را دریافت جایزه عالی. با آن، و سپس شما به پایان رسید PSET بهبود می یابند. نام من Zamyla است، و این CS50 است.