হুম, আমি মনে করি আমি প্রশ্নটি ভুল বুঝেছি তবে আমি এটি ঝুঁকি নিয়ে যাচ্ছি। নিম্নলিখিত সোজা পদ্ধতিতে কী ভুল?
public static void CopyFilesRecursively(DirectoryInfo source, DirectoryInfo target) {
foreach (DirectoryInfo dir in source.GetDirectories())
CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name));
foreach (FileInfo file in source.GetFiles())
file.CopyTo(Path.Combine(target.FullName, file.Name));
}
সম্পাদনা করুন যেহেতু এই পোস্টিংটি একটি সমান সরল প্রশ্নের উত্তরের জন্য একটি চিত্তাকর্ষক সংখ্যক ডাউনভোট সংগ্রহ করেছে, তাই আমি একটি ব্যাখ্যা যুক্ত করি। দয়া করে downvoting আগে এই পড়া ।
প্রথমত, এই কোডটি প্রশ্নের কোডটিতে একটি ড্রপ-ইন প্রতিস্থাপন হিসাবে উদ্দেশ্য নয়। এটি কেবল উদাহরণের উদ্দেশ্যে।
Microsoft.VisualBasic.Devices.Computer.FileSystem.CopyDirectory
কিছু অতিরিক্ত নির্ভুলতা পরীক্ষা করে (যেমন উত্স এবং লক্ষ্যটি বৈধ ডিরেক্টরি কিনা, উত্সটি লক্ষ্যটির পিতামাতা কিনা that) যা এই উত্তরটি থেকে অনুপস্থিত। এই কোডটি সম্ভবত আরও অনুকূলিত।
বলেছিল, কোডটি ভাল কাজ করে । এটা আছে (প্রায় অভিন্নরুপে) বছর ধরে একটি পরিপক্ক সফ্টওয়্যার ব্যবহার করা। সমস্ত আইও হ্যান্ডলিং সহ অন্তর্নিহিত চঞ্চলতা ছাড়াও (উদাহরণস্বরূপ, যদি আপনার কোডটি লেখার সময় ব্যবহারকারী ম্যানুয়ালি ইউএসবি ড্রাইভটি আনপ্লাগ করেন তবে কী ঘটে?), কোনও সমস্যা নেই are
বিশেষত, আমি এটি উল্লেখ করতে চাই যে এখানে পুনরাবৃত্তির ব্যবহার একেবারেই সমস্যা নয়। তত্ত্বের মধ্যে না (ধারণাগতভাবে, এটি সর্বাধিক মার্জিত সমাধান) বা বাস্তবে নয় : এই কোডটি স্ট্যাকটিকে উপচে ফেলবে না । স্ট্যাকটি যথেষ্ট গভীরভাবে নেস্টেড ফাইলের স্তরক্রমগুলি পরিচালনা করতে যথেষ্ট বড়। স্ট্যাক স্পেস কোনও সমস্যায় পরিণত হওয়ার অনেক আগে, ফোল্ডারের পথ দৈর্ঘ্যের সীমাবদ্ধতাটি কিক।
লক্ষ্য করুন যে কোনও দূষিত ব্যবহারকারী প্রতিটি অক্ষরের গভীর-নেস্টযুক্ত ডিরেক্টরি ব্যবহার করে এই ধারণাটি ভাঙ্গতে সক্ষম হতে পারেন। আমি এটি চেষ্টা করিনি। তবে কেবলমাত্র পয়েন্টটি বর্ণনা করার জন্য: একটি সাধারণ কম্পিউটারে এই কোডটি ওভারফ্লো করতে, ডিরেক্টরিগুলি কয়েক হাজার বার নেস্ট করাতে হবে । এটি কেবল বাস্তবের দৃশ্য নয় not