বর্তমান ফোল্ডারের পাথ পান


222

আমি এমন একটি প্রোগ্রাম তৈরি করতে চাই যা ফাইলগুলিকে রূপান্তর করে। আমি চাইব যে ব্যবহারকারী কোনও এক্সিকিউটেবল ফাইলটি কোনও ডিরেক্টরিতে রাখতে সক্ষম হবেন এবং সেই প্রোগ্রামটি সম্পাদন করার সময় (.exe- এ ডাবল-ক্লিক করুন) আমি চাই যে প্রোগ্রামটি বর্তমান ফোল্ডারের মধ্যে সমস্ত ফাইল যেখানে প্রক্রিয়া ফাইলটি উপস্থিত রয়েছে সেখানে প্রক্রিয়া করা হোক । প্রোগ্রামটি বর্তমানে এটি চালাচ্ছে এমন পথে কীভাবে নির্ধারণ করতে পারে?

আমি চেষ্টা করেছি System.Windows.Forms.Application.StartupPathকিন্তু মনে হচ্ছে এটি ভুল উপায়।

কোন ধারনা?

উত্তর:


334

আপনার ক্ষেত্রে আপনার ব্যবহার করা উচিত নয়Directory.GetCurrentDirectory() , কারণ বর্তমান ডিরেক্টরিটি এক্সিকিউশন ফোল্ডারের থেকে আলাদা হতে পারে, বিশেষত আপনি যখন শর্টকাটের মাধ্যমে প্রোগ্রামটি চালাবেন।

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);আপনার উদ্দেশ্যে ব্যবহার করা ভাল । এটি বর্তমানে সম্পাদনকারী অ্যাসেমব্লি যেখানে থাকে সেই পথের নামটি ফিরিয়ে দেয়।

যদিও আমার প্রস্তাবিত পদ্ধতির সাহায্যে আপনি এক্সিকিউটিভ এসেম্বলি, এন্ট্রি এসেম্বলি বা অন্য কোনও বোঝা সমাবেশের মধ্যে পার্থক্য করতে পারবেন, যেমন সোনার গনেল তার উত্তরে বলেছিলেন,

System.IO.Path.GetDirectoryName(Application.ExecutablePath);

যথেষ্ট হতে পারে। এটি সমান হবে

System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

10
গেটএন্ট্রিএ্যাসাবল্যাশন () এবং গেটএক্সেকিউটিংঅ্যাস্পাবেশন () এর মধ্যে একটি আকর্ষণীয় পার্থক্য রয়েছে। বিশদ জানতে স্ট্যাকওভারফ্লো.com
ভদ্রা

3
যেমনটি আমি বলেছিলাম: এটি বর্তমানে কার্যকরকারী সমাবেশটি যেখানে বাস করে তার নামটি ফিরিয়ে দেয় । মধ্যে পার্থক্য GetEntryAssemblyএবং GetExecutingAssemblyআশ্চর্য হিসাবে খুব বেশি আসে না, ফাংশন নাম দিয়েও সুস্পষ্ট। যদি তারা একই কাজ করে তবে কেন দুটি কার্য করা উচিত? :-)
থারস্টন দিত্তমার

2
+1 টি Assembly.GetEntryAssembly () clickonce মাধ্যমে চলমান অ্যাপ্লিকেশনের ক্ষেত্রে আমাকে সাহায্য
Artiom

9
এটি সিস্টেমে রয়েছে efনির্ধারণ, ঠিক System.Reflection.Assembly.GetExecutingAssembly().Locationতেমন সম্পূর্ণ - যদি আপনি তাত্ক্ষণিক উইন্ডো থেকে পরীক্ষা করছেন
দি রেড মটর

146
System.AppDomain.CurrentDomain.BaseDirectory

এটি আপনাকে আপনার অ্যাপ্লিকেশনটির চলমান ডিরেক্টরি দেবে। এটি ওয়েব অ্যাপ্লিকেশনগুলির জন্যও কাজ করে। এরপরে আপনি আপনার ফাইলটিতে পৌঁছাতে পারবেন।


9
এই উদ্দেশ্যে ব্যবহার করার জন্য এটি সবচেয়ে সঠিক সম্পত্তি। কারেন্টডোমাইনের বেসডাইরেক্টরি সর্বদা সঠিক অবস্থানের দিকে নির্দেশ করবে যদিও অ্যাপডোমাইন গতিশীলভাবে ভিন্ন স্থান থেকে অ্যাসেম্বলিকে দেখার জন্য তৈরি করা হয়েছিল।
ধ্রুভিন

পারফেক্ট। এটি কোনও অ্যাপ্লিকেশনের জন্য স্বাধীনভাবে কাজ করে, বিশেষত স্ট্রিমরিডার ব্যবহার করার সময়, যা অ্যাপ্লিকেশন ধরণের উপর নির্ভর করে বিভিন্ন পরম পাথ পড়তে পারে।
user3326078

40

আমি নিম্নলিখিত কোড সহ একটি সাধারণ কনসোল অ্যাপ্লিকেশন তৈরি করেছি:

Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);
Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine(Environment.CurrentDirectory);

আমি ফলাফল কার্যকর করতে অনুলিপি C:\temp2। তারপরে আমি সেই এক্সিকিউটেবলের মধ্যে একটি শর্টকাট রেখেছি C:\temp3এবং এটি চালিয়েছি (একবার এক্সাই থেকে নিজেই এবং একবার শর্টকাট থেকে)। এটি উভয় বার নিম্নলিখিত ফলাফলগুলি দিয়েছে:

C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2

যদিও আমি নিশ্চিত যে কার্যত ঠিক একই জিনিসটি করার জন্য পাঁচটি পৃথক পদ্ধতি রয়েছে তা বোঝানোর জন্য অবশ্যই কিছু ককামামির কারণ থাকতে হবে , তবে আমি অবশ্যই জানি না এটি কী। তবুও, এটি প্রদর্শিত হবে যে বেশিরভাগ পরিস্থিতিতে আপনার পছন্দসই যাকে পছন্দ করতে পারেন are

আপডেট: আমি "স্টার্ট ইন:" ফিল্ডটি পরিবর্তন করে শর্টকাট বৈশিষ্ট্যগুলি সংশোধন করেছি C:\temp3। এটি নিম্নলিখিত ফলাফলের ফলে:

C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3

... যা বিভিন্ন পদ্ধতির মধ্যে অন্তত কিছু পার্থক্য প্রদর্শন করে।


2
আপনাকে অনেক ধন্যবাদ.
বাজ 9032

একটি গুরুত্বপূর্ণ নোট। ওয়ার্কিং ডিরেক্টরিটি সর্বদা ইনস্টলড ডিরেক্টরি হিসাবে একই হয় না।
জর্দান


21
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

থেকে Path.GetDirectoryName

নির্দিষ্ট পাথ স্ট্রিংয়ের জন্য ডিরেক্টরি তথ্য প্রদান করে।

থেকে Application.ExecutablePath

এক্সিকিউটেবল ফাইলের জন্য পথ পায় যা এক্সিকিউটেবল নাম সহ অ্যাপ্লিকেশন শুরু করে।


19

এটা ব্যবহার কর,

var currentDirectory = System.IO.Directory.GetCurrentDirectory(); 

আপনি এটি ব্যবহার করতে পারেন।

var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

8

জন্য .NET কোর ব্যবহারSystem.AppContext.BaseDirectory

(এর প্রতিস্থাপন হিসাবে AppDomain.CurrentDomain.BaseDirectory)


6

1।

Directory.GetCurrentDirectory();

2।

Thread.GetDomain().BaseDirectory

3।

Environment.CurrentDirectory

Environment.CurrentDirectoryবিভিন্ন উপায়ে পরিবর্তন করা যেতে পারে ... (শর্টকাট সেটিংস, ইত্যাদি)
ইউশা আলেয়াউব



0

এটি আমার পক্ষে সবচেয়ে ভাল কাজ করে বিশেষত ডটনেট কোর সিঙ্গল ফাইল প্রকাশের সময়। Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.