.NET সমাবেশে কোনও পাঠ্য ফাইল এম্বেড করবেন কীভাবে?


118

আমি কোনও অ্যাসেমব্লিতে একটি পাঠ্য ফাইল এম্বেড করতে চাই যাতে আমি পাঠ্যটি ডিস্ক থেকে না পড়ে লোড করতে পারি এবং যাতে আমার যা কিছু প্রয়োজন হয় তা এক্সের মধ্যে অন্তর্ভুক্ত থাকে। (যাতে এটি আরও বহনযোগ্য)

এই কাজ করতে একটি উপায় আছে কি? আমি কি রিসোর্স ফাইল দিয়ে কিছু ধরে নিই?

এবং যদি আপনি এটি করতে পারেন তবে আপনি এটি কীভাবে করবেন এবং আপনি কীভাবে প্রোগ্রামটিকে স্ট্রিংয়ে পাঠ্য লোড করবেন?

উত্তর:


147

প্রকল্পের ফাইলটিতে ডান ক্লিক করুন, বৈশিষ্ট্য নির্বাচন করুন।

উইন্ডোটি খোলে, রিসোর্সগুলি ট্যাবে যান, এবং যদি এটির ট্যাব-পৃষ্ঠার মাঝখানে কেবল একটি নীল লিঙ্ক থাকে, একটি নতুন সংস্থান তৈরি করতে এটিতে ক্লিক করুন।

এখানে চিত্র বর্ণনা লিখুন

তারপরে ট্যাব-পৃষ্ঠার উপরের সরঞ্জামদণ্ড থেকে একটি নতুন পাঠ্য ফাইল যুক্ত করতে নির্বাচন করুন, একটি নাম দিন, এটি আপনার প্রকল্পে যুক্ত হবে এবং এটি খুলবে।

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

উপরের বর্ণনার বিষয়ে যদি কিছু অস্পষ্ট থাকে তবে দয়া করে একটি মন্তব্য করুন এবং এটি সম্পন্ন না হওয়া বা বোঝাপড়া না হওয়া পর্যন্ত আমি এটিকে সম্পাদনা করব :)


1
নির্দেশিকা কোডটি 'ব্যবহার করে' দেখতে কেমন হবে, আমি এই কাজটি করার জন্য লড়াই করছি। আমি সলিউশনস টেক্সটকে একটি রিসোর্স হিসাবে যুক্ত করেছি, তবে এটি রিসোর্সস সলিউশনগুলি খুঁজে পাচ্ছে না - আমি মনে করি যে আমি ব্যবহারের নির্দেশনাটি অনুপস্থিত।
স্পেজ করুন

3
আহ-হাহ, আমাকে যা করতে হবে তা হ'ল আমার সাথে যুক্ত করা। সামনের দিকে (অর্থাত্ আমার.সম্পাদন.সোলিউশন) সরল!
স্পেজ

2
একটি সংস্থান যুক্ত করে এর সাথে উত্পন্ন এবং অন্তর্ভুক্ত Properties\Resources.Designer.csহয় namespace YourProjectRootNamespace.Properties, তাই আপনাকে ব্যবহার করতে হবে YourProjectRootNamespace.PropertiesProjectRootNamespaceভিজ্যুয়ালস্টুডিওতে আপনার প্রকল্পের বৈশিষ্ট্যগুলিতে সংজ্ঞায়িত করা হয়।
ইলিয়াগপের্ত্রভ

1
যদি আমি এই পদ্ধতিতে কোনও পাঠ্য ফাইল যুক্ত করি এবং বলি যে পাঠ্য ফাইলটি আমার সমাধানের অংশ ... যদি সেই ফাইলটি আপডেট হয়ে যায় এবং আমি সংসদ পুনর্নির্মাণ করি তবে এম্বেড থাকা উত্সটিও আপডেট হবে? অথবা আমি যদি ফাইলটি কখনও পরিবর্তন করি তবে ম্যানুয়ালি মুছে ফেলা / পুনরায় যুক্ত করা দরকার?
পিটার টিরেল

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

38

ভিজ্যুয়াল স্টুডিও 2003, ভিজ্যুয়াল স্টুডিও 2005 এবং সম্ভবত পূর্ববর্তী সংস্করণগুলিতে (এটি ২০০৮ সালেও কাজ করে) আপনি আপনার প্রকল্পের পাঠ্য ফাইলটি অন্তর্ভুক্ত করতে পারেন, তারপরে 'সম্পত্তি' প্যানেলে, ক্রিয়াটি 'এম্বেডেড রিসোর্স' এ সেট করতে পারেন। তারপরে আপনি ফাইলটি স্ট্রিম হিসাবে ব্যবহার করে অ্যাক্সেস করতে পারবেন Assembly.GetManifestResourceStream(string)

এখানে অন্যান্য উত্তরগুলি আরও সুবিধাজনক। আমি সম্পূর্ণতার জন্য এটি অন্তর্ভুক্ত।

নোট করুন যে এই পদ্ধতিটি অন্যান্য ধরণের ফাইল যেমন চিত্র, আইকন, শব্দ, ইত্যাদি এম্বেড করার জন্য কাজ করবে ...


8
দ্রষ্টব্য: getManLiveResourceStream () এর জন্য প্যারামিটার হিসাবে নেমস্পেস + ফাইলের নাম ব্যবহার করুন, যেমন "MyNamespace.MyTextfile.txt"। সমস্ত নামের একটি তালিকা পেতে আপনি getManLiveResourceNames () এও কল করতে পারেন।
স্টিফেল

32

একটি পাঠ্য ফাইল এম্বেড করার পরে, ফাইলটি এই জাতীয় কোডের যে কোনও জায়গায় ব্যবহার করুন ...

global::packageName.Properties.Resources.ThatFileName

3
এটি একটি আরও ভাল পদ্ধতির কারণ এটি উত্স অপসারণ করা হলে এটি একটি সংকলক ত্রুটি ফেলে দেবে। এটি টাইপগুলিও দূর করে। পোস্টের জন্য ধন্যবাদ.
বেন গ্রিপকা

মানের +5। আমি কি এটি সি # ডিএলএল স্তরের মধ্যে ফাইলে আবার লিখতে পারি?
প্রজওয়াল ভাট

1
আমি যদি ThatFileNameকোনও ভেরিয়েবল থেকে নির্দিষ্ট করতে চাই ?
c00000fd

4

হ্যাঁ, আপনি সঠিক - একটি উত্স ফাইল তৈরি করুন। আপনি যখন এই কাজটি করেন যে আপনার স্ট্রিংটি "লোড" করার দরকার নেই, এটি রিসোর্স হিসাবে উল্লেখ করা হবে hatever যে কোনও কিছু স্ট্রিং ইউডাইফাইন্ড।


2

আমার জন্য কি কাজ করেছে তা এখানে। (আমার একটি এক্সিকিউটেবল। নেট ইমেজ ফাইলটিতে এমবেড করা কোনও ফাইলের বিষয়বস্তু পড়তে হবে)

কিছু করার আগে আপনার ফাইলটি ভিজ্যুয়াল স্টুডিওতে আপনার সমাধানে অন্তর্ভুক্ত করুন। (আমার ক্ষেত্রে ভিএস 2017 সম্প্রদায়)) আমি Solution Explorerডান ক্লিক করা Propertiesফোল্ডারে স্যুইচ করেছি , Add Existing Itemফাইলটি বেছে নিয়েছি এবং বেছে নিয়েছি । (বলুন FileName.txt।) তারপরে থাকা অবস্থায় Solution Explorerঅন্তর্ভুক্ত ফাইলটিতে ডান ক্লিক করুন, নির্বাচন করুন Propertiesএবং Build Actionহিসাবে চয়ন করুন Embedded Resource

তারপরে এই কোডটি এর বাইটগুলি পড়তে ব্যবহার করুন:

string strResourceName = "FileName.txt";

Assembly asm = Assembly.GetExecutingAssembly();
using( Stream rsrcStream = asm.GetManifestResourceStream(asm.GetName().Name + ".Properties." + strResourceName))
{
    using (StreamReader sRdr = new StreamReader(rsrcStream))
    {
        //For instance, gets it as text
        string strTxt = sRdr.ReadToEnd();
    }
}

নোট করুন এটি যদি আপনি না হিসাবে প্রস্তাবিত হয় একটি সম্পদ হিসেবে যে ফাইল যোগ করতে হবে গৃহীত উত্তর


1

আমি যা করেছি তা এখানে:

  1. প্রকল্পটিতে ডান ক্লিক করে ভিজ্যুয়াল স্টুডিওতে আমার ফাইলগুলি (সংস্থানগুলি) যুক্ত করা হয়েছে।
  2. আপনার যোগ করা প্রতিটি ফাইলের ডান ক্লিক করুন এবং "বিল্ড প্রকার" এম্বেড রিসোর্সে পরিবর্তন করুন।
  3. সংস্থানটি অ্যাক্সেস করার জন্য:

    ক। ফাংশনটি ব্যবহার করে বর্তমান সমাবেশটি পেয়েছেন:GetExecutingAssembly()

    খ। আমি যে সংস্থানটি যুক্ত করেছি তা হ'ল একটি পাঠ্য ফাইল ছিল তাই আমি এটি ব্যবহার করে একটি স্ট্রিমে পড়ি GetManifestResourceStream(fileName)। আমি ফাইলের নামগুলি যেভাবে অ্যাক্সেস করেছি তা কল করে byGetManifestResourceNames()

    গ। এখন StreamReader()যদি আপনার ইচ্ছা মতো ফাইলের শেষে পড়তে একটি ক্লাস ব্যবহার করুন ।


0

পভানের উত্তরে যুক্ত করা, বর্তমান সমাবেশটি পেতে (সাধারণ বিভাগে):

Assembly _assembly;

গেটম্যানিয়েস্টের রিসোর্সস্ট্রিম (ফাইলের নাম) (কোডে, যেখানে সংস্থান থেকে পড়া দরকার):

try
{
    _assembly = Assembly.GetExecutingAssembly();
    _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("*Namespace*.*FileName*.txt"));
}
catch
{
    Console.WritelLine("Error accessing resource!");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.