[Powered by Google Translate] [ফাইল ইনপুট / আউটপুট] [জেসন Hirschhorn, হার্ভার্ড বিশ্ববিদ্যালয়] [এটি CS50, CS50.TV] যখন আমরা একটি ফাইল মনে, কি আসে মনে হয় একটি মাইক্রোসফট ওয়ার্ড ফাইলটি, একটি JPEG চিত্র, বা একটি MP3 গান, এবং আমরা ভিন্ন উপায়ে ফাইল এই ধরনের প্রতিটি সাথে ইন্টারেক্ট. একটি শব্দ নথিতে উদাহরণস্বরূপ, আমরা টেক্সট যোগ করুন যখন একটি JPEG চিত্র সঙ্গে আমরা প্রান্ত আউট ক্রপ বা রং পরিমার্জন করা হতে পারে. এখনো আমাদের কম্পিউটারের মধ্যে উপস্থিত ফাইলের সমস্ত ফণা অধীন হয় না আরো তুলনায় একটি zeros এবং বেশী দীর্ঘ ক্রম. এটা নির্দিষ্ট আবেদন ফাইল সাথে মিথস্ক্রিয়া উপর সিদ্ধান্ত নিতে যে কিভাবে এই দীর্ঘ ক্রম প্রক্রিয়া ব্যবহারকারী যাও এটি উপস্থাপন. এক হাত, এক বাইট কেবল একটি নথি তাকান হতে পারে, বা 8 zeros এবং বেশী, এবং একটি পর্দায় ASCII অক্ষর প্রদর্শন. অন্য দিকে, একটি বিটম্যাপ ইমেজ 3 বাইট তাকান হতে পারে, বা 24 zeros এবং বেশী, এবং 3 হেক্সাডেসিমেল সংখ্যা হিসাবে তাদের ব্যাখ্যা যে লাল, সবুজ, নীল এবং মান প্রতিনিধিত্ব একটি ইমেজ এক পিক্সেল. যাই হোক না কেন তারা মত আপনার পর্দায় তাদের মূল তাকান, হতে পারে, ফাইলগুলি কিছুই zeros এবং বেশী একটা ক্রম বেশী. সুতরাং let এর আকর্ষণীয় এবং কিভাবে আসলে আমরা এই zeros এবং বেশী নিপূণভাবে তাকান যখন এটি লেখার এবং একটি ফাইল থেকে পড়া আসে. আমি ভঙ্গ একটি সহজ 3 ভাগে বিভক্ত প্রক্রিয়ার মধ্যে এটি ডাউন করে শুরু করব. এর পরে, আমি দুই কোড উদাহরণ যে এই তিনটি অংশ প্রকট মধ্যে আকর্ষণীয় হবে. অবশেষে, আমি প্রক্রিয়া পর্যালোচনা এবং তার সবচেয়ে গুরুত্বপূর্ণ বিবরণ কিছু করব. যেকোন ফাইলটি আপনার ডেস্কটপে যে অস্ত যায়, সর্বপ্রথম যে জিনিসটি করতে এটি খুলতে হয়. সি ইন আমরা একটি পূর্বনির্ধারিত struct একটি পয়েন্টার প্রকাশক দ্বারা এই করবেন যে ডিস্কে একটি ফাইল প্রতিনিধিত্ব করে. এই ফাংশন কল ইন, এছাড়াও আমরা ঠিক কিনা আমরা বা লিখতে ফাইল থেকে পড়তে চাই. এর পরে, আমরা আসল লেখা এবং পড়ার না. বিশেষ ফাংশন একটি সংখ্যা আমরা এই অংশে ব্যবহার করতে পারেন, এবং তাদের প্রায় সব চিঠি ফল, ফাইলের জন্য যা দাঁড়িয়েছে দিয়ে শুরু. সর্বশেষ, সমগোত্রীয় যাও একটু ফাইল উপরের প্রান্তে লাল রংয়ের X আপনার কম্পিউটারে খুলুন এব, আমরা একটি চূড়ান্ত ফাংশন কল করে ফাইলটি বন্ধ করুন. এখন যে আমরা কি আমরা করতে যাচ্ছেন সাধারণ ধারণা আছে, এর কোড মধ্যে ডুব দেওয়া. এই ডিরেক্টরির মধ্যে, আমরা দুটি সি ফাইল এবং তাদের সংশ্লিষ্ট এক্সিকিউটেবল ফাইল আছে. মুদ্রলিখ প্রোগ্রাম আর মাত্র একটি কমান্ড লাইন আর্গুমেন্ট লাগে, ডকুমেন্টের নাম আমরা তৈরি করতে চান. এই ক্ষেত্রে, আমরা এটি doc.txt ডাকবো. যাক এর প্রোগ্রাম চালানো এবং কয়েক লাইন লিখুন. হাই. আমার নাম জেসন. পরিশেষে, আমরা "প্রস্থান করার জন্য." টাইপ করব এখন যদি আমরা এই ডিরেক্টরির মধ্যে উপস্থিত ফাইলের তালিকা সব, আমরা দেখতে যে একটি নতুন ডকুমেন্ট doc.txt নামক বিদ্যমান. যে ফাইল এই প্রোগ্রামটি শুধুমাত্র তৈরি. এবং অবশ্যই, খুব এটা কিছুই একটি zeros এবং বেশী দীর্ঘ ক্রম বেশী. যদি আমরা এই নতুন ফাইল খুলুন, আমরা কোড 3 লাইন আমরা আমাদের প্রোগ্রামে প্রবেশ করানো দেখুন - হাই. মে নামটি জেসন. কিন্তু কি আসলে যখন typewriter.c রান উপর যাচ্ছে? সুদের প্রথম আমাদের জন্য লাইন লাইন 24. এই লাইন, আমরা আমাদের ফাইল পয়েন্টার ডিক্লেয়ার. ফাংশন যে এই পয়েন্টার, fopen ফেরৎ, দুটি আর্গুমেন্ট লাগে. প্রথম হল ফাইল এক্সটেনশন যদি উপযুক্ত ফাইল নাম সহ. পুনরাহ্বান যে একটি ফাইল এক্সটেনশন হয় সর্বনিম্ন পর্যায়ে ফাইল প্রভাবিত না. আমরা একটি zeros এবং বেশী দীর্ঘ ক্রম সঙ্গে সর্বদা কারবারী. কিন্তু এটি প্রভাব আছে কিভাবে ফাইল এবং ব্যাখ্যা কি অ্যাপ্লিকেশনের জন্য খোলা ব্যবহৃত হয়. fopen যাও দ্বিতীয় যুক্তি হল একটি একক অক্ষর কি যে আমরা পরে আমরা ফাইল খোলার জন্য কি পরিকল্পনা ঘোরা. ওয়াট, আর, এবং এ - এই যুক্তি জন্য তিনটি অপশন আছে আমরা এই ক্ষেত্রে w নির্বাচিত করেছি, কারণ আমরা ফাইল লিখতে চান. আর, হিসাবে সম্ভবত আপনি অনুমান করতে পারেন পড়া ফাইলের জন্য. এবং একটি সংযোজন ফাইলের জন্য হয়. উভয় w চেপে লেখা এবং একটি ফাইল ব্যবহার করা যেতে পারে, w ফাইলের শুরুতে থেকে লেখা শুরু হবে এবং সম্ভাব্য কোন তথ্য যা পূর্বে মুছে ফেলা হয়েছে সঞ্চিত আছে. ডিফল্টরূপে, আমরা ফাইল খোলার জন্য, যদি এটি ইতিমধ্যে বিদ্যমান নয়, আমাদের বর্তমান কাজ ডিরেক্টরির মধ্যে নির্মিত হয়. তবে, যদি আমরা অ্যাক্সেস অথবা একটি ভিন্ন অবস্থান একটি ফাইল তৈরি করতে চান, মধ্যে fopen প্রথম যুক্তি, আমরা ফাইলের নাম ছাড়াও একটি ফাইল পাথ উল্লেখ করতে পারেন. যদিও এই প্রক্রিয়ার প্রথম ভাগে শুধুমাত্র কোড দীর্ঘ একটি লাইন, এটা সর্বদাই ভাল অনুশীলন লাইনের অন্য সেট অন্তর্ভুক্ত যে যা সাফল্যের সাথে ফাইল খোলা ছিল অথবা তৈরি নিশ্চিত চেক. যদি fopen নাল ফেরৎ, আমরা এগিয়ে যাও আমাদের প্রোগ্রামের সাথে কামারশালা চাইবেন না, এবং যদি এই অপারেটিং সিস্টেম মেমরি 'র বাইরে ঘটতে পারে অথবা যদি আমরা একটি ডিরেক্টরির জন্য যা আমরা সঠিক অনুমতি উপস্থিত না করে একটি ফাইল খোলার চেষ্টা. প্রক্রিয়ার পার্ট দুই মুদ্রলিখ এর সময় লুপের মধ্যে সঞ্চালিত হয়. আমরা ব্যবহারকারী থেকে ইনপুট পেতে একটি CS50 লাইব্রেরি ফাংশন ব্যবহার, এবং গ্রহ তারা প্রোগ্রাম অব্যাহতিপ্রাপ্ত না চান, আমরা স্ট্রিং নিয়ে এটি ফাইলটি লিখতে fputs ফাংশন ব্যবহার. fputs অনেক ফাংশন এর মধ্যে শুধুমাত্র একটি ফাইল আমরা লিখতে ব্যবহার করতে পারেন. অন্যান্য fwrite, fputc, এবং এমনকি fprintf অন্তর্ভুক্ত. তথাপি নির্দিষ্ট ফাংশন ব্যবহার করে আমরা শেষ পর্যন্ত যদিও,, তাদের সব প্রয়োজন তাদের যুক্তির মাধ্যমে জানা,, অন্তত দুটি জিনিস - করা হবে না এবং যেখানে এটি প্রয়োজন হবে কি করা প্রয়োজন. আমাদের ক্ষেত্রে, ইনপুট হিসাবে চিহ্নিত পংক্তিটি করা প্রয়োজন যে লিখিত যাও এবং fp পয়েন্টার হয় যে যেখানে আমরা আমাদের লেখার নির্দেশ দেয়. এই অনুষ্ঠানে প্রক্রিয়ার অংশ দুটি বরং সহজবোধ্য. আমরা কেবল করছি ব্যবহারকারী থেকে একটি পংক্তি গ্রহণ যোগ এবং এটি সরাসরি আমাদের ফাইল সঙ্গে সামান্য-এর কোন ইনপুট বৈধতা বা নিরাপত্তা চেক. আবার অনেক সময়, দুটি অংশ আপনার কোড বাল্ক আপ নিতে হবে. অবশেষে, অংশ তিনটি লাইন 58 হয়, যেখানে আমরা ফাইলটি বন্ধ করুন. এখানে আমরা আমাদের আসল এবং fclose ফাইল পয়েন্টার এটি পাস কল. পরবর্তী লাইন, আমরা ফিরে শূন্য, আমাদের প্রোগ্রামের সমাপ্তি সূচিত হয়. এবং, হ্যাঁ, যে তিনটি অংশ হিসাবে হিসাবে সহজ. যাক এর ফাইল থেকে পড়া যেতে. পিছনে আমাদের ডিরেক্টরির মধ্যে আমরা একটি ফাইল নামক printer.c আছে. চলুন আমরা শুধুমাত্র ফাইল তৈরি সঙ্গে এটি চালানোর জন্য - doc.txt. এই প্রোগ্রাম, নাম হিসাবে সুপারিশ সহজভাবে, প্রিন্ট আউট করা ফাইলের বিষয়বস্তু এটি প্রেরণ. এবং সেখানে আমরা এটা আছে. কোড লাইনের পূর্বে টাইপ করা এবং doc.txt সংরক্ষিত ছিল. হাই. আমার নাম জেসন. যদি আমরা printer.c মধ্যে ডুব, আমরা দেখতে যে কোড অনেক অনুরূপ কি আমরা কেবল typewriter.c মাধ্যমে পদচারণা যাও. প্রকৃতপক্ষে লাইন 22, যেখানে আমরা ফাইল খোলা, এবং লাইন 39, যেখানে আমরা ফাইলটি বন্ধ, উভয় typewriter.c প্রায় অভিন্ন fopen দ্বিতীয় যুক্তি জন্য, সংরক্ষণ করুন. এই সময় আমরা একটি ফাইল থেকে পড়া করছি, তাই আমরা আর নির্বাচিত পরিবর্তে w থেকে. সুতরাং, আসুন প্রক্রিয়ার দ্বিতীয় অংশ ফোকাস. ইন লাইন 35, 4 হিসাবে আমাদের লুপ দ্বিতীয় শর্ত, আমরা fgets ফোন করতে, আগে থেকে fputs যাও সহচর ফাংশন. এই সময় আমরা তিন আর্গুমেন্ট আছে. প্রথম অক্ষর যেখানে স্ট্রিং সঞ্চিত করা হবে অ্যারের পয়েন্টার. দ্বিতীয়টি হল সর্বোচ্চ সংখ্যক অক্ষর করা হবে পড়তে. এবং তৃতীয়টি হল ফাইল সঙ্গে যা আমরা কাজ করছি যাও পয়েন্টার. আপনি যে লুপ জন্য শেষ হয় যখন fgets ফেরৎ নাল বিজ্ঞপ্তি পাবেন. দুটি কারণে যে এই ঘটেছে থাকতে পারে সেখানে. প্রথম, একটি ত্রুটি ঘটেছে থাকতে পারে. দ্বিতীয়ত, এবং আরো সম্ভবত, ফাইলের শেষে এবং পৌঁছেছেন কোন অক্ষর পড়তে হয়. ইন কেস আপনি হতাশ করছি, দুটি ফাংশন যে আমাদের জানাতে করার অনুমতি উপস্থিত নয় যার কারণ হল এই বিশেষ নাল পয়েন্টার জন্য ক্ষতির কারণ হতে পারে. এবং, আশ্চর্যজনক না, যেহেতু তারা ফাইলগুলির সাথে কাজ করতে থাকে, উভয় ferror চিঠি চ সঙ্গে ফাংশন এবং feof ফাংশন শুরু. পরিশেষে, আমরা আগে শেষ করা, এক ফাইল ফাংশন শেষে সম্পর্কে দ্রুত নোট, যা, শুধু হিসাবে উল্লেখ করেছে, feof হিসাবে করা হয়. প্রায়শই আপনি নিজেকে খুঁজে পেতে ব্যবহার করার জন্য এবং loops যাও কার্যক্রমে ফাইল মাধ্যমে আপনার উপায় পড়তে হবে. সুতরাং, আপনি এইসব loops শেষ একটি উপায় প্রয়োজন পরে আপনি এই ফাইলের শেষে পৌঁছানোর করব. আপনার ফাইল পয়েন্টার উপর feof কলিং এবং যদি এটা সত্যি দেখতে পরীক্ষণের ঠিক যে কি. সুতরাং, একটি অবস্থা (! Feof (fp)) সঙ্গে যখন একটি লুপ পুরোপুরি উপযুক্ত সমাধান মত মনে হতে পারে. যাইহোক, বলতে আমরা এক লাইন আমাদের টেক্সট ফাইলের মধ্যে অবশিষ্ট আছে. আমরা যখন আমাদের লুপ লিখুন এবং সবকিছু আউট হিসাবে পরিকল্পনা কাজ করব না. পরের বারে মাধ্যমে, আমাদের প্রোগ্রাম যদি fp এর feof সত্য পরীক্ষা হবে, কিন্তু আছে - এবং এই অত্যন্ত গুরুত্বপূর্ণ পয়েন্ট বুঝতে পারি এখানে - এটা সত্য হতে পারে না এখনও করবে না. কারন feof উদ্দেশ্য চেক করা হল না যদি পড়া একটি ফাংশন কল পরের ফাইলের শেষে আঘাত করা, বরং কি না তা ইতিমধ্যে ফাইলের শেষে হয়েছে পৌঁছেছেন চেক যাও. এই উদাহরণে ক্ষেত্রে, আমাদের ফাইলের শেষ লাইন পড়া যায় পুরোপুরি মসৃণ, কিন্তু প্রোগ্রাম যা আমরা আমাদের ফাইলের শেষে আঘাত করেছি এখনো জানি না. এটা পর্যন্ত এটি একটি অতিরিক্ত পঠিত আছে না যে এটি ফাইলের শেষে কাউন্টারে. সুতরাং, একটি সঠিক শর্ত নিম্নলিখিত হবে: fgets এবং তার তিনটি আর্গুমেন্ট - আউটপুট, ফলাফল আকার, এবং fp - সমান না এবং যে সব নাল যাও. এই পদ্ধতির আমরা printer.c মধ্যে নেন, এবং এই ক্ষেত্রে, পরে লুপ করে প্রস্থান করে, আপনি feof বা ferror এই লুপ থেকে প্রস্থান করার জন্য নির্দিষ্ট যুক্তি হিসাবে ব্যবহারকারী যাও অবহিত কল করতে পারেনি. লেখার এবং একটি ফাইল থেকে পড়া একেবারে প্রাথমিক সময়ে হয়,, একটি সহজ পদ্ধতি 3 ভাগে বিভক্ত. প্রথমত, আমরা ফাইলটি খুলুন. দ্বিতীয়ত, আমরা আমাদের ফাইলে কিছু করা বা তা বাইরে কিছু জিনিস নিতে. তৃতীয়ত, আমরা ফাইলটি বন্ধ করুন. প্রথম এবং শেষ অংশ সহজে. মধ্যম ভাগে যেখানে প্রবঞ্চক স্টাফ গুরত্বপূর্ণ. ফণা নীচে এবং যদিও আমরা সবসময় একটি zeros এবং বেশী দীর্ঘ ক্রম সঙ্গে লেনদেন করছেন, এটি যখন বিমূর্ততা একটি স্তর যোগ কোডিং না সাহায্য যে যা আরো ঘনিষ্ঠভাবে বর্ণনার অনুরূপ আমরা যা দেখছি ব্যবহার করতেন মধ্যে ক্রম সক্রিয়. উদাহরণস্বরূপ, যদি আমরা একটি 24 বিট বিটম্যাপ ফাইলের সাথে কাজ করছি, আমরা সম্ভবত করা বা পড়া একটি সময়ে তিন বাইট লেখা পাবেন. যা ক্ষেত্রে, এটা যাও এবং উপযুক্তভাবে সংজ্ঞায়িত অর্থে নামকরণ করা হবে একটি struct যে 3 বাইট বড়. যদিও ফাইলগুলির সাথে কাজ জটিল মনে হতে পারে, তাদের ব্যবহার আমাদের কিছু সত্যিই অসাধারণ করার অনুমতি দিয়েছে. আমরা আমাদের প্রোগ্রাম বাইরে বিশ্বের রাষ্ট্র পরিবর্তন করতে পারেন, আমরা আমাদের কিছু প্রোগ্রাম জীবনের বাইরে জীবন তৈরি করতে পারেন, অথবা আমরা এমনকি কিছু করার আগে আমাদের প্রোগ্রাম আরম্ভ চলমান নির্মিত হয়েছিল পরিবর্তন করতে পারেন. ফাইলের সাথে আলাপচারিতার একটি প্রোগ্রামিং এর সত্যিকারের শক্তিশালী সি অংশ এবং আমি কি আপনি এটি দিয়ে কোড আসতে ইন তৈরি করতে চাই তা দেখতে অধীর করছি. আমার নাম জেসন Hirschhorn. এটি CS50. [CS50.TV] [হাস্য] ঠিক আছে. এক সময় লাগবে. আমরা শুরু করছি. যখন আমরা একটি ফাইল মনে - >> ওহ, অপেক্ষা করুন. দুঃখিত. [হাস্য] ঠিক আছে. আরে এখানে. যখন আমরা একটি ফাইল মনে - যখন আপনি একটি ফাইল মনে - ঠিক আছে. সম্পর্কে আপনি প্রস্তুত হয়ে গেলে বলুন. ওহ, মহান. কোন - একটি teleprompter থেকে পড়া যদিও মনে হতে পারে. আমার খারাপ.