[সঙ্গীত বাজাচ্ছি] ZAMYLA Chan: পুনরুদ্ধার এর মোকাবেলা করা. উদ্ধার সম্ভবত আমার প্রিয় pset হয়, এবং প্রধানত আমি এটা মনে করি, কারণ সত্যিই সত্যিই, শান্ত. মূলত, আপনি একটি মেমরি দেওয়া করছি কার্ড ফাইল যা ছবি মুছে দেওয়া হয়েছে. কিন্তু আপনি কি করতে যাচ্ছেন কি তাদের সব পুনরুদ্ধার হয়. ঠিক আছে. সুতরাং এটা হয়তো সত্যিই উত্তেজনাপূর্ণ, কিন্তু একটি আপনি কারণ, একটু ভয় দেখিয়ে একটি খালি সি ফাইল এবং দেওয়া আপনি এটি ইন পূরণ করতে হবে ঠিক আছে, তাই এর এই বিরতি দেওয়া সামলানো ভাগে. আপনি খুলতে চাইবেন মেমরি কার্ড ফাইল. যে যথেষ্ট সহজ মনে হয়. এর পরে, শুরুতে খুঁজে একটি JPG, ইমেজ. এই মেমরি সব ফাইল কার্ড jpgs হতে যাচ্ছে. এর পরে, একবার আপনি, শুরুতে খুঁজে আপনি যদি একটি নতুন JPG, খুলতে যাচ্ছেন যে , মত একটি JPG, তৈরি, এবং 512 লিখতে হয় একটি নতুন JPG, পর্যন্ত একটি সময়ে বাইট পাওয়া গেছে, এবং প্রোগ্রাম শেষ, একবার আপনি ফাইলের শেষে সনাক্ত. সুতরাং প্রথম পদক্ষেপ প্রথম খুলতে হয় মেমরি কার্ড ফাইল. কিন্তু যদি আপনি ইতিমধ্যে এই জানি, এবং আছে যাচ্ছে যে একটি ফাইল ইনপুট / আউটপুট ফাংশন খুব দরকারী প্রমাণ. ঠিক আছে. সুতরাং jpgs কি? আমরা শুরুতে এটি প্রয়োজন কারণ. ওয়েল, jpgs, শুধু একটু ম্যাপের মত, বাইট ঠিক সিকোয়েন্স আছে. সৌভাগ্য যে, প্রত্যেক JPG, উভয় সঙ্গে শুরু হয় 0xff, 0xd8, 0xff, 0xe0, এক ক্রম এর বাইট, অথবা অন্য বাইটের অনুক্রম. তাই ঐ চার বাইট নির্দেশ একটি JPG, শুরু. যারা দুই সমন্বয় ছাড়া অন্য কেউ না চার বাইট. এবং সৌভাগ্য যে আমাদের জন্য, আরেকটি সত্য যে আমরা সুবিধা গ্রহণ করতে পারেন যে প্রতি JPG, পার্শ্ব দ্বারা প্রান্তের সংরক্ষিত মেমরি কার্ড উপর. আমি একটি কাঠামো প্রতিনিধিত্ব করেছি schematically এই মেমরি কার্ড এখানে স্লাইড. এখানে, প্রতি বর্গ, প্রতি আয়তক্ষেত্র, 512 বাইট প্রতিনিধিত্ব করে, এবং এটি শুরু হয় আমরা না যে একটি ধূসর সাথে সত্যিই একটি JPG, আছে. কিন্তু তারপর পরিশেষে আমরা আঘাত একটি তারকা সঙ্গে একটি ব্লক. যে মানে হল যে প্রথম চার বাইট আউট ঐ 512 ঐ দুটি এক একটি JPG, ক্রমের শুরু. এবং আমরা একবার তারপর সেখানে থেকে যান, এবং এক JPG, পরের এক শুরু হয়, শেষ হয়. আমরা কি কখনো কোন না থাকে মধ্যবর্তী ধূসর স্থান. কিন্তু কিভাবে আসলে আমরা এই পড়া, এবং না আমরা করতে পারেন, যাতে 512 বাইট পড়া তুলনা প্রথম স্থান? ভাল, এর, ফিরে fread যান যা উপস্থিত থাকবে যে struct মধ্যে লাগে আপনি পড়ি যে বাইট. তাই আপনি যদি রাখা চলুন সেখানে যারা - আকার, সংখ্যা, এবং তারপর inpointer আপনার কাছ থেকে পড়া করছি যে. এখন, আমরা একটি সময়ে 512 পড়তে চান, এবং আমরা একটি বাফারের মধ্যে এই সংরক্ষণ করতে ইচ্ছুক, আমি একে ডাকতে যাচ্ছি. মূলত, আমরা ধরে রাখতে যাচ্ছেন যারা 512 বাইট সম্মুখের এবং না এটা দিয়ে জিনিষ, ডান? আমরা উভয় প্রথম তুলনা চলুন চার বাইট, বা আমরা চলুন ঠিক আছে, এটা পড়া? আমি তখন তথ্য পয়েন্টার তারপর হবে আপনার বাফার হিসাবে পরিবেশন করা, এবং inpointer, ওহ, এটা ঠিক যাচ্ছে আপনার মেমরি কার্ড করা. আমাদের মেমরি কার্ড পরিকল্পিত ফিরে. আমরা একটি সময়ে 512 বাইট পড়া চলুন, প্রতি 512 বাইট ব্লক সংরক্ষণ একটি বাফার মধ্যে, অধিষ্ঠিত যারা সম্মুখের আমরা জানি, যতক্ষণ না, যারা 512 বাইট বাফার ঠিক কি তাদের কাজ করতে. তাই শুরুতে কিছু না, তাই আমরা বাফার পড়তে এটি তুলনা, এবং করব আমরা এটা নিয়ে কিছু করতে হবে না হবে. এবং তারপর, পরিশেষে আমরা একটি তারকা আঘাত আমরা করেছি, যার অর্থ, অবরোধ আমাদের প্রথম JPG, খুঁজে পাওয়া যায়নি. তাই বাফার এখন রাখা যে কোন JPG থেকে বাইট. তারা করছি 512 বাইট, কারণ পরের বার না একটি তারকা ব্লক, এছাড়াও আছেন যে কোন JPG অংশ. এবং jpgs সেখানে থেকে একটানা হয় উপর আমরা পরবর্তী JPG, আঘাত, যতক্ষণ মধ্যে. এবং তারপর বাফার তারপর ঝুলিতে 512 যে কোন JPG জন্য বাইট, এবং তাই, এবং তাই ঘোষণা. ঠিক আছে. আপনি প্রথম তারকাচিহ্নিত আঘাত তাই একবার ব্লক, প্রথম JPG,, কিভাবে আপনি কি আসলে ভাল,, এটা খুলতে? এর একটি নতুন কোন JPG করা যাক. একটি JPG, জন্য ফাইলের নামের যাচ্ছে বিন্যাসে হতে, সংখ্যা, সংখ্যা, number.jpg, যে তারা নামে করছি তারা পাওয়া যায় যা আদেশ, 0 থেকে শুরু. সুতরাং প্রথম JPG, যে আপনি খুঁজে 000.jpg করা হবে. সুতরাং, সম্ভবত একটি ভাল ধারণা রাখা আপনি এ পর্যন্ত পাওয়া করেছি এর কতগুলি jpgs. সুতরাং যে ফাইলের নাম এর. কিন্তু কিভাবে আপনি আসলে যে করতে পারি? ভাল, আমরা ব্যবহার করতে যাচ্ছেন একটি ফাংশন sprintf বলা. Printf অনুরূপ একটু বিট, যেখানে আপনি স্ট্রিং জন্য স্থানধারক ব্যবহার করতে পারেন এই ক্ষেত্রে ছাড়া sprintf প্রিন্ট হবে বর্তমান মধ্যে ফাইল খুঁজে ডিরেক্টরি, না টার্মিনাল মধ্যে. ঠিক আছে. তাই আমরা এখানে আমরা শিরোনাম আছে দেখতে, সংরক্ষণ করবে যে একটি গৃহস্থালি অ্যারে পরিসমাপ্তি স্ট্রিং, এবং আমরা পাস একটি সঙ্গে প্রকৃত স্ট্রিং এর শিরোনাম স্থানধারক, শুধু আমরা করেছি পছন্দ printf, না শেখা. কিন্তু আমি এখানে আছে যে এই কোড 2.jpg, না 002.jpg আপনাকে. তাই আমি খুঁজে বের করতে আপনাকে ছেড়ে দেব কিভাবে করতে স্থানধারক সংশোধন করুন সঠিক নাম. ঠিক আছে. তাই একবার আপনি আপনি করতে পারেন তাহলে sprintf'd করেছি এটি বিদ্যমান, কারণ যে ফাইলটি খুলুন fopen সঙ্গে আপনার ডিরেক্টরি,, ব্যবহার শিরোনাম, এবং আপনি চান তাহলে যাই হোক না কেন মোড ইন যে ফাইল খোলার জন্য তাই এখন আমরা একটি নতুন কোন JPG ফাইল খোলা করেছি যে, এখন আমরা একটি সময়ে 512 বাইট লিখতে পারেন একটি নতুন JPG, পাওয়া না হওয়া পর্যন্ত সময়,. সুতরাং আসুন অন্য কটাক্ষপাত fwrite এর সিনট্যাক্স এ. আমি আমি এই স্লাইড একটি দেখাচ্ছে করছি জানি অনেক, কিন্তু আমি নিশ্চিত যে করতে চাই আপনাকে বলছি, খুব বিভ্রান্ত করতে না আমি এটা করা খুব সোজা জানি প্রথম এবং শেষ তালগোল যুক্তি, বিশেষ করে. কিন্তু আপনার কাছ থেকে লেখার মনে রাখা আউট ফাইল চিত্র মধ্যে আপনার বাফার. এখন আপনি কি জানেন যে কিভাবে লেখার 512 আপনি করেছি যে আপনার JPG, ফাইলে বাইট তৈরি, ভাল, আমরা যে বন্ধ করতে চান আমরা শেষ পৌঁছেছেন প্রক্রিয়া একবার আমাদের কার্ড, কারণ সেখানে হবে না পাওয়া যাবে কোন ইমেজ. সুতরাং আসুন fread ফিরে যান আরো একবার, আমি প্রতিজ্ঞা করছি. fread আকারের কতগুলি আইটেম ফেরৎ, আকার, সফলভাবে মধ্যে প্রস্তুত ছিল. মূলত, এই হতে যাচ্ছে যাই হোক না কেন আপনি সঠিক, সংখ্যার জন্য পাস? আপনি নম্বর পড়ার চেষ্টা করছি কারণ আকার, আয়তন উপাদানের. কিন্তু fread যে পড়তে সক্ষম না হলে উপাদান সংখ্যা, তারপর ফিরে পাবেন এটি সফলভাবে পড়তে যাই হোক না কেন নম্বর. এখন, খেয়াল করা এক গুরুত্বপূর্ণ বিষয় যে আপনি ইনপুট / আউটপুট অন্য একটি ফাইল ব্যবহার করা হলে fgetc মত ফাংশন, এটি ফিরে পাবেন এটি সফলভাবে পড়তে কতগুলি আইটেম. কি এই ফাংশন সম্পর্কে দরকারী হল যে আপনি একটি ভেতরে ফাংশন ব্যবহার করে যদি শর্ত, এটা যখন নিজেই নির্বাহ করব যা যে অবস্থা, তা নির্ধারণের শুধু সত্যিই দরকারী. তাই আপনি যদি এই শর্ত আছে, বলে, যদি fread বাফার, sizeof কুকুর, 2, পয়েন্টার,, 1 সমান সমান যে আমি পড়তে চাই যে মানে সময় 2 কুকুর. কিন্তু fread হিসাবে পরিবর্তে 2 1 প্রদান করে যদি আশা, যে 2 আছে মানে কুকুর আমার ফাইলের বাকি, বরং 1. কিন্তু এটা 2 ফেরৎ তারপর, আমি এখনও আছে আমার বাফার ভেতরে যারা 2 কুকুর. তাই এখন যে আপনি কিভাবে একটা ধারনা দেয় ফাইলের শেষে পরীক্ষা, কিন্তু এর এখন যুক্তি দিয়ে যান. কিভাবে আমরা আসলে সব টুকরা করবেন একসঙ্গে এই উপাদান? আমরা আমাদের প্রথম JPG, আঘাত একবার, যেহেতু আমরা jpgs সংরক্ষণ করা হয় যে জানি contiguously, আমরা যতক্ষণ না লেখা হবে আমরা কার্ড ফাইলের শেষে পৌঁছানোর. কিন্তু আমরা লিখতে চাই না কিছু তখন পর্যন্ত. সুতরাং আমরা করেন যে না শুধুমাত্র, বিষয় একটি নতুন JPG, শুরু, কিন্তু কিনা আমরা ইতিমধ্যে একটি JPG, বা না পাওয়া করেছি. এটি একটি নতুন JPG, শুরু করেন, আমরা করব আমাদের বর্তমান কোন JPG ফাইল যদি বন্ধ করতে চান আমরা এক খোলা, এবং খোলা আছে মধ্যে লিখুন একটি নতুন এক. এটা নতুন কোন JPG শুরু না হলে, যদিও আমরা একই JPG, ফাইল যাব খুলুন এবং যে মধ্যে লিখুন. আমরা যেটা মধ্যে আমাদের বাফার লিখতে হবে আমরা খোলা আছে JPG, ফাইল, যে প্রদান করা আমরা অবশ্যই, এক খোলা আছে. আমরা আমাদের প্রথম JPG, পাওয়া না এখনো, আমরা কিছু লিখুন না. এবং এই প্রক্রিয়া আপনি যতক্ষণ চলতে কার্ড ফাইলের শেষে পৌঁছানোর. এবং পরিশেষে, আপনি করতে চাইবেন আপনার কোন fclose নিশ্চিত যে আপনি fopened করেছি যে ফাইল. আপনার সাথে আরামদায়ক একবার ধারণা, কিছু কটাক্ষপাত আমি এখানে অন্তর্ভুক্ত করেছেন যা pseudocode,. প্রথমত, আপনি কার্ড ফাইল খুলতে চান, এবং তারপর নিম্নলিখিত প্রক্রিয়ার পুনরাবৃত্তি আপনি পৌঁছেছেন হওয়া পর্যন্ত কার্ড শেষ. আপনি 512 বাইট পড়তে চান একটি বাফার মধ্যে. যে বাফার ব্যবহার করে আপনি না পরীক্ষা করতে পাবেন আপনি যদি একটি শুরু করার কিনা নতুন JPG, বা না. এবং যে প্রশ্নের উত্তর করবে আপনার ফাইল ব্যবস্থাপনা প্রভাবিত - যা আপনি খুলতে ফাইল, যা ওগুলো আপনি বন্ধ করবেন না. এর পরে, আপনি ইতিমধ্যেই একটি JPG, পাওয়া? আপনি কিভাবে পালন করা হয়েছে যে সম্পর্কে অবগত? এর পরে, যে তার উপর নির্ভর করে, আপনি হয় পাবেন বর্তমান কোন JPG মধ্যে লিখুন যে আপনি এ সব লিখতে খোলা, বা না আছে, আপনি যদি এখনো একটি JPG, পাওয়া যায় না, কারণ. অবশেষে, একবার আপনি শেষ পৌঁছেছেন ফাইল, আপনার কোন বন্ধ করতে চাইবেন আপনি খোলা আছে ফাইল অবশিষ্ট. আমরা এখানে পরিপাটি হতে চান. এবং সেই সঙ্গে, আপনি সব উদ্ধার করেছি যে মেমরি থেকে অনুপস্থিত ফাইল খুবই আশ্চর্যজনক কৃতিত্ব যা কার্ড,. তাই আবার নিজেকে চাপড়ান. কিন্তু, করতে আরও একটি উপাদান আছে প্রতিযোগিতার যা pset,. আপনি খুঁজে পাবেন যে ছবি সব আপনি উদ্ধার করেছি যে আসলে CS50 এর কর্মীদের ছবি. সুতরাং আপনি ক্যাম্পাস বা কোথাও যদি কাছাকাছি, তারপর আপনার সাথে ছবি নিতে পারেন কর্মী, এবং যে অধ্যায় কর্মী সদস্যদের সঙ্গে সবচেয়ে ছবি তাদের উদ্ধার করা ফাইল থেকে হবে একটি ভয়ঙ্কর পুরস্কার পেতে. যে সঙ্গে, তাহলে আপনি সমাপ্ত করেছি pset পুনরুদ্ধার. আমার নাম Zamyla, এবং এই CS50.