.NET ওয়েব অ্যাপ্লিকেশনে বর্তমান ডিরেক্টরি পাওয়া


105

সুতরাং আমার একটি ওয়েব প্রকল্প রয়েছে এবং আমি সি # পদ্ধতি ব্যবহার করে ওয়েবসাইটের মূল ডিরেক্টরিটি পাওয়ার চেষ্টা করছি Directory.GetCurrentDirectory()। ভবিষ্যতে ফাইলের অবস্থানগুলি পরিবর্তিত হওয়ায় আমি স্থিতিশীল পথটি ব্যবহার করতে চাই না। এই পদ্ধতিটি আমার ইমেজপ্রসেস.এএসপিএক্স.সি.এস. ফাইলগুলিতে চলছে তবে যেখানে আমি ভেবেছিলাম এটি ফিরে আসবে:

C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs

আমি পরিবর্তে পাচ্ছি:

C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\

এটি কেন ঘটছে এবং এর সম্ভাব্য সমাধান কী হতে পারে তা কি কেউ ব্যাখ্যা করতে পারেন? অনেক ধন্যবাদ.


এখানে সম্পর্কিত পোস্ট যা সাধারণভাবে নেট অ্যাপ্লিকেশন কার্যকর করার পথে কথা বলে।
আরবিটি

উত্তর:


210

বর্তমান ডিরেক্টরিটি সিস্টেম-স্তরের বৈশিষ্ট্য; এটি সার্ভারটি যে ডিরেক্টরি থেকে চালু হয়েছিল সেই ডিরেক্টরিটি ফিরিয়ে দেয়। ওয়েবসাইটটির সাথে এর কোনও যোগসূত্র নেই।

আপনি চান HttpRuntime.AppDomainAppPath

আপনি যদি এইচটিটিপি অনুরোধে থাকেন তবে আপনি কল করতেও পারেন Server.MapPath("~/Whatever")


2
ধন্যবাদ। আমি আসলে সন্ধান করছিলাম HttpRuntime.BinDirectory, তবে আপনি নিজের উত্তরে যা উল্লেখ করেছেন তা একবার চেষ্টা করেছিলাম, তবে এটি ডিবাগারে নির্ধারণ করা সহজ ছিল।
কেন্ট ওয়েইজেল

যদি আমি `Server.MapPath (" ~ যাই হোক না কেন ") ব্যবহার করতে হবে এবং আইআইএস সাইটে হোস্ট করা হয় myserver । আমি একটি সি পেয়েছি: f সামফোল্ডার my যাই হোক না কেন, মাইজারের / যাই হোক না কেন ফোল্ডার থেকে।
সি 8

@ সি 8: হ্যাঁ; এটা কি Server.MapPathকরে। যদি আপনি চান stackoverflow.com/q/5823847/34397
SLaks

2
যদি আপনি .NET সমাহারগুলি সঙ্গে অপরিচিত (অথবা তাৎক্ষণিক উইন্ডোতে হয়), পূর্ণ কমান্ড হয় System.Web.HttpRuntime.AppDomainAppPathএবংSystem.Web.HttpRuntime.HttpContext.Server.MapPath("~")
testpattern

2
@ সর্বশেষ প্যাটার্নটি HttpContextনেই System.Web.HttpContext.Current.Server.MapPath("~"), আছেHttpRuntime
চেঞ্জি

112

এই কোডটি ব্যবহার করুন:

 HttpContext.Current.Server.MapPath("~")

বিস্তারিত উল্লেখ:

Server.MapPath একটি শারীরিক ডিরেক্টরিতে মানচিত্রের সম্পর্কিত বা ভার্চুয়াল পাথ নির্দিষ্ট করে।

  • Server.MapPath(".") সম্পাদিত হওয়া ফাইলের বর্তমান শারীরিক ডিরেক্টরি (যেমন এসপেক্স) প্রদান করে
  • Server.MapPath("..") মূল ডিরেক্টরি প্রদান করে
  • Server.MapPath("~") অ্যাপ্লিকেশনটির মূলটিতে শারীরিক পথ ফেরায়
  • Server.MapPath("/") ডোমেন নামের মূলটিতে শারীরিক পথ ফেরায় (প্রয়োজনীয়ভাবে প্রয়োগের মূলের মতো নয়)

একটি উদাহরণ:

ধরা যাক আপনি কোনও ওয়েব সাইট অ্যাপ্লিকেশনটিকে ( http://www.example.com/ ) নির্দেশ করেছেন

C:\Inetpub\wwwroot

এবং আপনার শপ অ্যাপ্লিকেশন ইনস্টল করে (আইআইএস-এ ভার্চুয়াল ডিরেক্টরি হিসাবে সাব ওয়েব, অ্যাপ্লিকেশন হিসাবে চিহ্নিত)

D:\WebApps\shop

উদাহরণস্বরূপ, যদি আপনি Server.MapPathনিম্নলিখিত অনুরোধটি কল করেন:

http://www.example.com/shop/products/GetProduct.aspx?id=2342

তারপর:

Server.MapPath(".") returns D:\WebApps\shop\products
Server.MapPath("..") returns D:\WebApps\shop
Server.MapPath("~") returns D:\WebApps\shop
Server.MapPath("/") returns C:\Inetpub\wwwroot
Server.MapPath("/shop") returns D:\WebApps\shop

যদি পথটি একটি ফরোয়ার্ড (/) বা পশ্চাদপদ স্ল্যাশ () দিয়ে শুরু হয় তবে MapPathপদ্ধতিটি এমন কোনও পথ ফেরায় যেন পথটি একটি পূর্ণ, ভার্চুয়াল পথ।

যদি পথটি স্ল্যাশ দিয়ে শুরু না হয়, MapPathপদ্ধতিটি অনুরোধের প্রক্রিয়াজাত হওয়ার ডিরেক্টরিটির সাথে সম্পর্কিত একটি পাথ ফেরত দেয়।

দ্রষ্টব্য: সি # তে, @ হ'ল ভারব্যাটিম আক্ষরিক স্ট্রিং অপারেটর অর্থ এই স্ট্রিংটি "যেমন আছে" ব্যবহার করা উচিত এবং পালানোর ক্রমগুলির জন্য প্রক্রিয়া করা উচিত নয়।

পাদটিকা

Server.MapPath(null)এবং Server.MapPath("")এই প্রভাবও উত্পাদন করবে।



3
@ জিজিও ভাল লিঙ্ক! লিঙ্কগুলি অনুসরণ করে, System.Web.Hosting.HostingEnvironment.MapPath("~")পরিবর্তে আমি শেষ করেছি , যা দুর্দান্ত কাজ করে, কোনও নির্ভরতা ছাড়াইSystem.Web.HttpContext.Current
ম্যাক্স ব্যারাক্লফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.