অ্যাপ্লিকেশন ফোল্ডার পাথ পাওয়ার সেরা উপায়


514

আমি দেখতে পাচ্ছি অ্যাপ্লিকেশন ফোল্ডারের পাথ পাওয়ার কিছু উপায় রয়েছে:

  1. Application.StartupPath
  2. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
  3. AppDomain.CurrentDomain.BaseDirectory
  4. System.IO.Directory.GetCurrentDirectory()
  5. Environment.CurrentDirectory
  6. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
  7. System.IO.Path.GetDirectory(Application.ExecutablePath)

পরিস্থিতির উপর নির্ভর করে সবচেয়ে ভাল উপায় কী?


9
আমাদের কাছে অ্যাপ্লিকেশনটির পাথ পাওয়ার জন্য অনেক উপায় রয়েছে। আমি মনে করি প্রতিটি উপায়ের একটি কারণ আছে।
লিও ভিও

1
# In-তে একটি ত্রুটি রয়েছে: পড়তে হবে: System.Reflection.Assembly.GetExecutesAs એવું বেলা ()। GetName ()। কোডবেস), System.IO.Path.GetDirectoryName (অ্যাপ্লিকেশন। এক্সেক্সিউটেবলপথ)
বিল ডব্লু

2
# 6 এর জন্য হুরয়, আমি যখন একটি ওয়েব প্রকল্পে থাকি, তখন আমি আমার আইওসি বোঝানো লাইব্রেরিতে সার্ভার.ম্যাপপথ যুক্তি চাইনি যা ওয়েব-নির্দিষ্ট প্রকৃতির নয়
বিকেডুডিজাইন

আমাদের এখন নির্ভরযোগ্য IHostEnvironment.ContentRootPath, ইনজেকশনের IHostEnvironmentউপর নির্ভরশীলতার মাধ্যমে অ্যাক্সেস করা হয়েছে (যার মধ্যে অন্যান্য দরকারী জিনিস রয়েছে)।
টিমো

উত্তর:


518

AppDomain.CurrentDomain.BaseDirectory যার অবস্থান অ্যাপ্লিকেশন ইনস্টল ডিরেক্টরিটির সাথে সম্পর্কিত ফাইলগুলি অ্যাক্সেস করার জন্য সম্ভবত সবচেয়ে দরকারী the

একটি এএসপি.এনইটি অ্যাপ্লিকেশনটিতে, এটি অ্যাপ্লিকেশন রুট ডিরেক্টরি হবে, বিন সাবফোল্ডার নয় - এটি সম্ভবত আপনি যা চান সম্ভবত তা। ক্লায়েন্ট অ্যাপ্লিকেশনটিতে এটি মূল এক্সিকিউটেবলযুক্ত ডিরেক্টরি হবে।

কোনও ভিএসটিও ২০০৫ অ্যাপ্লিকেশনটিতে, এটি আপনার অ্যাপ্লিকেশনটির জন্য ভিএসটিও পরিচালিত অ্যাসেমব্লিগুলি সম্বলিত ডিরেক্টরি হবে, বলবেন না, এক্সেল কার্যকর করার পথে।

অন্যরা আপনার পরিবেশের উপর নির্ভর করে বিভিন্ন ডিরেক্টরি ফিরিয়ে দিতে পারে - উদাহরণস্বরূপ @ Vimvq1987 এর উত্তর দেখুন।

CodeBaseএটিই সেই জায়গা যেখানে কোনও ফাইল পাওয়া গিয়েছিল এবং এটি http: // দিয়ে শুরু হওয়া URL হতে পারে। যে ক্ষেত্রে Locationসম্ভবত সমাবেশ ডাউনলোড ক্যাশে হবে। কোডবেস জিএসি-র সমাবেশগুলির জন্য সেট গ্যারান্টিযুক্ত নয় ।


2
উইন্ডোজ এক্সপি 32 বিটে পরীক্ষা করার সময়, শর্টকাট শুরু হয়েছিল সেখানে ফিরে আসে।
জোশুয়া পুত্র

1
+1 @ জো এবং ভিএসটিও নথির স্তরের অ্যাড-ইন এই দেখুন

3
সচেতন থাকুন যে এটি শেষে ব্যাকস্ল্যাশ সহ একটি পথ ফেরায়। প্রক্রিয়া যুক্তি হিসাবে পাস করার জন্য ফলাফলের সাথে একটি স্ট্রিং ফর্ম্যাট করার সময় এটি আমার সমস্যার সৃষ্টি করে।
অ্যাভেনমোর

19
@ ওভেনমোর - আপনি যদি কোনও পথ তৈরির জন্য কোনও স্ট্রিং ফর্ম্যাট করছেন তবে Path.Combineপরিবর্তে ব্যবহারের কথা বিবেচনা করুন। এটি আপনার জন্য পিছনের ব্যাকস্ল্যাশটির যত্ন নেবে।
জো

1
এটি ভিএস 2017 এ আমার জন্য বিন / ডিবাগ ফোল্ডারটি ফিরিয়ে দিচ্ছে, মূল ডিরেক্টরি নয়।
স্মোভবিবি

86
  1. Application.StartupPathএবং System.IO.Path.GetDirectoryName(Application.ExecutablePath)-- . - শুধুমাত্র উইন্ডোজ ফর্ম অ্যাপ্লিকেশনের জন্য কাজ করতে চলেছে

  2. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)

    আপনাকে এরকম কিছু দিতে চলেছে: "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\Temporary ASP.NET Files\\legal-services\\e84f415e\\96c98009\\assembly\\dl3\\42aaba80\\bcf9fd83_4b63d101"আপনি যে পৃষ্ঠাটি চালাচ্ছেন এটি সেখানে।

  3. AppDomain.CurrentDomain.BaseDirectoryওয়েব অ্যাপ্লিকেশনটির জন্য দরকারী হতে পারে এবং এমন কিছু ফিরে আসবে "C:\\hg\\Services\\Services\\Services.Website\\"যা বেস ডিরেক্টরি এবং বেশ কার্যকর।

  4. System.IO.Directory.GetCurrentDirectory() এবং 5। Environment.CurrentDirectory

প্রক্রিয়াটি যেখান থেকে সরে গেছে তার অবস্থান আপনাকে পেয়ে যাবে - সুতরাং ভিজ্যুয়াল স্টুডিও থেকে ডিবাগ মোডে চলমান ওয়েব অ্যাপের জন্য "C:\\Program Files (x86)\\IIS Express"

  1. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)

.dllকোডটি যে চলমান রয়েছে সেখানে ওয়েব অ্যাপের জন্য আপনাকে সেই স্থানটি দেবে"file:\\C:\\hg\\Services\\Services\\Services.Website\\bin"

এখন উদাহরণস্বরূপ কনসোল অ্যাপ পয়েন্ট 2-6 .exe ফাইল যেখানে ডিরেক্টরি হবে ।

আশা করি এটি আপনার কিছুটা সময় সাশ্রয় করবে।


2
মোটামুটি নিশ্চিতভাবেই "বর্তমান ফোল্ডার "টি
চাওয়া


59

নোট করুন যে এই সমস্ত পদ্ধতিতে একই মান ফিরে আসবে না। কিছু ক্ষেত্রে, তারা একই মানটি ফিরিয়ে দিতে পারে তবে সাবধান হন, তাদের উদ্দেশ্যগুলি পৃথক:

Application.StartupPath

আয় StartupPathপ্যারামিটার (যখন অ্যাপ্লিকেশন চালানোর নির্ধারণ করা যাবে)

System.IO.Directory.GetCurrentDirectory()

বর্তমান ডিরেক্টরিটি প্রদান করে, যা অ্যাপ্লিকেশনটি অবস্থিত ফোল্ডার হতে পারে বা নাও হতে পারে। একই জন্য যায় Environment.CurrentDirectory। আপনি যদি এটি কোনও ডিএলএল ফাইলে ব্যবহার করছেন তবে এটি প্রক্রিয়াটি কোথায় চলছে তার পথে ফিরে আসবে (এটি বিশেষত এএসপি.এনইটি ক্ষেত্রে সত্য)।


7
দয়া করে দয়া করে ব্যবহার করবেন না GetCurrentDirectory(), বিভিন্ন পথ থেকে জিনিস চলমান ভালবাসার জন্য! :(
কায়লিফ্রি_অনডেক

@ কেলেলিফ্রি_ডোনেক আপনি আগের প্রশ্নের জন্য কারণগুলি রাখেন নি।
nless

10

একটি ওয়েব অ্যাপ্লিকেশনের জন্য, বর্তমান ওয়েব অ্যাপ্লিকেশন রুট ডিরেক্টরিটি পেতে, বর্তমান আগত অনুরোধের জন্য সাধারণত ওয়েব পৃষ্ঠায় কল করুন:

HttpContext.Current.Server.MapPath();

System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;

উপরে কোড বর্ণনা


6

আমি উইন্ডোজ সার্ভিস থেকে উইন 32 এপিআইয়ের মাধ্যমে একটি ব্যবহারকারীর কাছ থেকে সেশনটিতে একটি প্রক্রিয়া শুরু করেছি যা আসলে লগ ইন হয়েছে (টাস্ক ম্যানেজার সেশনে 1 নয় 0)। এর মধ্যে আমরা জানতে পারি, কোন পরিবর্তনশীল সবচেয়ে ভাল।

উপরের প্রশ্ন থেকে সমস্ত 7 টি ক্ষেত্রে, নিম্নলিখিত ফলাফলগুলি রয়েছে:

Path1: C:\Program Files (x86)\MyProgram
Path2: C:\Program Files (x86)\MyProgram
Path3: C:\Program Files (x86)\MyProgram\
Path4: C:\Windows\system32
Path5: C:\Windows\system32
Path6: file:\C:\Program Files (x86)\MyProgram
Path7: C:\Program Files (x86)\MyProgram

আপনি যখন আপনার কেসটির জন্য সেরা ভেরিয়েবল সন্ধান করেন তখন একই জিনিসগুলি করে কিছু আপনার পক্ষে সহায়ক।


4
খুব প্রাসঙ্গিক উত্তর। তাই অনেকে ভুলে যায় যে "কার্যক্ষম ডিরেক্টরি"! = "প্রোগ্রাম ডিরেক্টরি"।
নাইয়ারগডস

3

আমার অভিজ্ঞতায়, সর্বোত্তম উপায় হ'ল এগুলির সংমিশ্রণ।

  1. System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase আপনাকে বিন ফোল্ডার দেবে
  2. Directory.GetCurrentDirectory() নেট কোর উপর ভাল কাজ করে কিন্তু নেট। নয় এবং আপনাকে প্রকল্পের মূল ডিরেক্টরিটি দেবে
  3. System.AppContext.BaseDirectoryএবং AppDomain.CurrentDomain.BaseDirectory নেট ভাল কাজ করে না। নেট কোর এবং আপনাকে প্রকল্পের মূল ডিরেক্টরিটি দেবে

ক্লাসের লাইব্রেরিতে যা টার্গেট করার কথা is নেট এবং নেট নেট আমি গ্রন্থাগারটি হোস্ট করে কোন ফ্রেমওয়ার্কটি পরীক্ষা করে একটি বা অন্যটিকে বেছে নিন।


2

আমি এটি সফলভাবে ব্যবহার করেছি

System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)

এটি লিনকপ্যাডের অভ্যন্তরেও কাজ করে


1
এটি গেটকারেন্টপ্রসেসের প্রারম্ভিক বন্ধনীটি অনুপস্থিত। বিটিডব্লিউ এটি সি: \ প্রোগ্রাম ফাইলগুলি visual ডটনেট আমার। নেট কোর প্রকল্পে ভিজ্যুয়াল স্টুডিওতে ডিবাগ করার সময় কারণ যেখানে ডটনেট.এক্সি অবস্থিত রয়েছে
t0b4cc0

1

রুট ডিরেক্টরি:

DriveInfo cDrive = new DriveInfo(System.Environment.CurrentDirectory);
var driverPath = cDrive.RootDirectory;

1
এটি বর্তমান চলমান ডিরেক্টরিটি পেয়েছে বলে মনে হচ্ছে এটি কখনও কখনও কার্যকর হতে পারে তবে এটি অবশ্যই EXE পাথ হওয়ার নিশ্চয়তা দেয় না।
ক্রোয়ে 2


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