এএসপি.নেটে বহিরাগত সি # ক্লাসে সার্ভার.ম্যাপপথ ব্যবহার করা হচ্ছে


132

আমি একটি সি # শ্রেণিতে নির্দিষ্ট ফাইলগুলির পরম পথ পাওয়ার চেষ্টা করছি। Server.MapPathএএসপিএক্স এবং তাদের কোড-পিছনের পৃষ্ঠাগুলির জন্য অবশ্যই দুর্দান্ত কাজ করে তবে অন্য শ্রেণির ফাইলে এটি বিদ্যমান নেই। আমি চেষ্টা করেছি HostingEnvironment.MapPath(), তবে এটি অভিযোগ করে যে আপেক্ষিক ভার্চুয়াল পথটির অনুমতি নেই। কোন চিন্তা?

System.Web ইতিমধ্যে আমদানি করা হয়েছে।

উত্তর:


302

ServerUtilityবর্গ আপনার একটি দৃষ্টান্ত হিসাবে পাওয়া যায় HttpContext। আপনি যদি এমন কোনও পরিবেশে থাকেন যেখানে আপনি জানেন যে এটিএসপি. নেট পাইপলাইনের অভ্যন্তরে কার্যকর করা হবে, আপনি ব্যবহার করতে পারেন

HttpContext.Current.Server.MapPath()

আপনাকে System.Webযদিও আমদানি করতে হবে ।


1
যদিও এই পোস্টটি 2 বছরেরও বেশি পুরানো হলেও আপনি আমাকে প্রচুর পরিমাণে সহায়তা করেছেন। ধন্যবাদ।
iarwain01

6
Pip পাইপলাইনে এটি কার্যকর না হলে কী হবে?
জাইটসমান 5:13

আপনি যদি এএসপি.নেটের অভ্যন্তরে সম্পাদন না করে থাকেন তবে আপনার নিজের পাইপলাইন না লিখে আপনার এইচটিটিপি কনটেক্সট সেট হওয়ার সম্ভাবনা কম :) আপনার প্রক্রিয়াটি যদি আপনার পাথের রাউটিংয়ের প্রাথমিক বিষয়গুলি অন্তর্দৃষ্টি করে থাকে তবে আপনি System.IO.Path পদ্ধতিগুলি একবার দেখে নিতে পারেন।
womp

এই সংকলিত তবে প্রসঙ্গটি নিয়ামকদের বাইরে নਾਲ, সুতরাং আমার কোড ত্রুটি। আমার মনে হয় ওম্প্প সেখানে একই কথা বলছে। যদি মামলা হয় তবে আপনি রাউটারগুলির বাইরে ম্যাপপ্যাথ অ্যাক্সেস করতে পারবেন?
এডেনকর্বিন

34

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

var path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/myfile.txt")

যদি

var path = Server.MapPath("~/App_Data");
var fullpath = Path.Combine(path , "myfile.txt");

অ্যাক্সেসযোগ্য


8

আপনি কি কেবল একটি রেফারেন্স যুক্ত করতে পারবেন না System.Webএবং তারপরে আপনি ব্যবহার করতে পারবেন Server.MapPath?

সম্পাদনা: আজকাল আমি HostingEnvironment.MapPathপদ্ধতিটি ব্যবহার করার পরামর্শ দেব :

এটি System.Webসমাবেশে একটি স্থিতিশীল পদ্ধতি যা সার্ভারে কোনও শারীরিক পথে ভার্চুয়াল পাথ মানচিত্র করে। এটা তোলে নেই একটি রেফারেন্স প্রয়োজন HttpContext


বাহ্যিক ক্লাসে নয়।
মজাদার

অবশ্যই আপনি বাহ্যিক শ্রেণিতে রেফারেন্স যুক্ত করতে পারেন; তবে স্পষ্টতই আপনাকে এটি একটি সার্ভার অনুরোধের প্রসঙ্গে ব্যবহার করতে হবে যাতে এইচটিটিপি কনটেক্সট নাল নয়।
ড্যান ডিপ্লো

4
System.Reflection.Assembly.GetAssembly(type).Location

যদি আপনি যে ফাইলটি পাওয়ার চেষ্টা করছেন সেটি হ'ল এক প্রকারের সমাবেশ স্থান। তবে ফাইলগুলি যদি সমাবেশের System.IOজায়গার সাথে সম্পর্কিত হয় তবে আপনি ফাইলটির সঠিক পথ পেতে নামস্থান দিয়ে এটি ব্যবহার করতে পারেন ।


-১: কীভাবে আপনাকে বিশ্বাস করতে পরিচালিত হয়েছিল যে তিনি কোনও অ্যাসেমব্লির অবস্থান চান?
জন স্যান্ডার্স

1
তিনি বলেছিলেন যে "নির্দিষ্ট কিছু ফাইল" তিনি ফাইলগুলির অবস্থান বা প্রকৃতি নির্দিষ্ট করেননি, সুতরাং সমাবেশের অবস্থানটি জানতেন এবং সেই পথের তুলনায় কাজ করতে সক্ষম হবেন সহায়ক হতে পারে। অবশ্যই যদি তিনি সত্যিই বলে থাকেন যে তিনি এখনও এইচটিপিপেক্সটেস্টে রয়েছেন তবে আমি উত্তর দেওয়ার জন্য বিরক্ত করতাম না।
ডেভিড ম্যাকইউইং

ডেভিড ম্যাকইউইং, আপনি যা পরামর্শ দেন তা কার্যকর হবে না কারণ আইআইএস অ্যাসেমব্লিগুলি যে ওয়েবসাইটে ইনস্টল করে সেখান থেকে লোড করে না, এগুলি অনুলিপি অ্যাসট নেট ক্যাশে অবস্থান থেকে অনুলিপি করা এবং লোড করা হয়, সুতরাং একটি গেটঅ্যাস্পাবলশন বা গেটএক্সেকিউটিংএএসবুলেশন করা আপনাকে সমাবেশের অবস্থানের দিকে নির্দেশ করবে তবে ম্যাপপথ যে ওয়েবসাইটটি দেখিয়েছে তার অবস্থানের সাথে এর কোনও সম্পর্ক নেই।
জুমালাইফগার্ড


3
class test
{
public static void useServerPath(string path)
{
   if (File.Exists(path)
{
 \\...... do whatever you wabt
}
else
{
\\.....
}
}

এখন যখন আপনি কোডবিহাইন্ড থেকে পদ্ধতিটি কল করবেন

উদাহরণ স্বরূপ :

protected void BtAtualizacao_Click(object sender, EventArgs e)
        {
             string path = Server.MapPath("Folder") + "\\anifile.txt";

            test.useServerPath(path);
}

এইভাবে আপনার কোডটি সহজ এবং একটি পদ্ধতিতে আপনি প্রতিটি কলের জন্য একাধিক পথ ব্যবহার করতে পারেন :)


3

এই আমার জন্য সাহায্য করেছে

//System.Web.HttpContext.Current.Server.MapPath //        
FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"),
FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);

স্ট্যাকওভারফ্লোতে স্বাগতম। আরও কিছুটা ব্যাখ্যা সহকারী প্রোগ্রামারদের সমাধানটি কেন কার্যকর হয়েছে তা বুঝতে সাহায্য করবে।
এনজেআইমনদার

1

আপনি এএসপি.এনইটি প্রসঙ্গে থাকছেন বা না থাকুক না কেন, আপনার কাছে হোস্টিংএইনভায়রনমেন্ট ব্যবহার করতে সক্ষম হওয়া উচিত lic অ্যাপ্লিকেশন ফিজিক্যালপথ


0

সার্ভার.মাপথ ("") এসপেক্স পৃষ্ঠায় কাজ করবে, আপনি যদি ক্লাস ফাইল থেকে পরম পথ পেতে চান তবে আপনাকে এটি ব্যবহার করতে হবে-

HttpContext.Current.Server.MapPath("~/EmailLogic/RegistrationTemplate.html")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.