'বর্ধিত' ফাইলের বৈশিষ্ট্যগুলি পড়ুন / লিখুন (সি #)


104

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


3
এই প্রশ্নের স্পষ্ট হয় না গৃহীত উত্তর শুধুমাত্র শো বর্ধিত প্রোপাটিজ পেতে কিভাবে এবং যেহেতু এর উত্তরে তাদের সেট কিভাবে না
দিমিত্রি নেস্টারক

1
সেটিং এর জন্য বর্ধিত বৈশিষ্ট্য দেখতে stackoverflow.com/questions/5337683/...
VoteCoffee

উত্তর:


83

ভিবি সম্পর্কে উন্মাদ না হওয়ার জন্য, এখানে এটি সি # তে রয়েছে:

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

public static void Main(string[] args)
{
    List<string> arrHeaders = new List<string>();

    Shell32.Shell shell = new Shell32.Shell();
    Shell32.Folder objFolder;

    objFolder = shell.NameSpace(@"C:\temp\testprop");

    for( int i = 0; i < short.MaxValue; i++ )
    {
        string header = objFolder.GetDetailsOf(null, i);
        if (String.IsNullOrEmpty(header))
            break;
        arrHeaders.Add(header);
    }

    foreach(Shell32.FolderItem2 item in objFolder.Items())
    {
        for (int i = 0; i < arrHeaders.Count; i++)
        {
            Console.WriteLine(
              $"{i}\t{arrHeaders[i]}: {objFolder.GetDetailsOf(item, i)}");
        }
    }
}

3
এই মানগুলির মধ্যে একটি কীভাবে সেট করবে? যেমন .txt ফাইলের জন্য লেখক বা প্রকাশক। আমি বিজয়ী 7 এ এবং এটি ব্যবহার করেছি এবং এটি খালি লেখক এবং প্রকাশক এবং অন্যান্য 282 বৈশিষ্ট্যগুলি দেখায়
বৈভব গারগ

1
@ ভেনভভ - আপনি এগুলি সেট করতে পারবেন না।
csharptest.net

26
আপনাকে রেফেন্সেস ডায়ালগের সিওএম ট্যাব থেকে মাইক্রোসফ্ট শেল নিয়ন্ত্রণ এবং অটোমেশনের একটি রেফারেন্স যুক্ত করতে হবে।
csharptest.net

2
এগুলি কীভাবে সেট করবেন সে সম্পর্কে এই প্রশ্নে আরও ভালভাবে আচ্ছাদিত করা হয়েছে: স্ট্যাকওভারফ্লো
নিকোলাস রাউল

1
উইন্ডোজ 10 এ এটি কেবলমাত্র ফ্রেম হার, ফ্রেমের উচ্চতা, প্রস্থ, .... সহ 52 টি ক্ষেত্র ফেরত দেয়?
মিনহ এনগুইন

27

আছে একটি CodeProject নিবন্ধ একটি ID3 পাঠক জন্য। এবং kixtart.org এ একটি থ্রেড যা অন্যান্য বৈশিষ্ট্যের জন্য আরও তথ্য রয়েছে। মূলত, আপনি কল করতে প্রয়োজন GetDetailsOf()পদ্ধতি উপর ফোল্ডারের জন্য শেল বস্তুর shell32.dll


ধন্যবাদ, এর থেকে আমার যা প্রয়োজন তা একসাথে আঁকতে সক্ষম হওয়া উচিত
ডেভিড হেইস

26

সমাধান 2016

আপনার প্রকল্পে নিম্নলিখিত নিউগেট প্যাকেজ যুক্ত করুন:

  • Microsoft.WindowsAPICodePack-Shell মাইক্রোসফ্ট দ্বারা
  • Microsoft.WindowsAPICodePack-Core মাইক্রোসফ্ট দ্বারা

সম্পত্তি পড়ুন এবং লিখুন

using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;

string filePath = @"C:\temp\example.docx";
var file = ShellFile.FromFilePath(filePath);

// Read and Write:

string[] oldAuthors = file.Properties.System.Author.Value;
string oldTitle = file.Properties.System.Title.Value;

file.Properties.System.Author.Value = new string[] { "Author #1", "Author #2" };
file.Properties.System.Title.Value = "Example Title";

// Alternate way to Write:

ShellPropertyWriter propertyWriter =  file.Properties.GetPropertyWriter();
propertyWriter.WriteProperty(SystemProperties.System.Author, new string[] { "Author" });
propertyWriter.Close();

গুরুত্বপূর্ণ:

ফাইলটি অবশ্যই একটি বৈধ হতে হবে, নির্দিষ্ট নির্ধারিত সফ্টওয়্যার দ্বারা নির্মিত। প্রতিটি ফাইল টাইপের নির্দিষ্ট বর্ধিত ফাইলের বৈশিষ্ট্য রয়েছে এবং সেগুলি সমস্ত লিখনযোগ্য নয়।

আপনি যদি ডেস্কটপে কোনও ফাইলকে ডান-ক্লিক করেন এবং কোনও সম্পত্তি সম্পাদনা করতে না পারেন, আপনি কোডেও এটি সম্পাদনা করতে সক্ষম হবেন না।

উদাহরণ:

  • ডেস্কটপে txt ফাইল তৈরি করুন, এর এক্সটেনশনের নাম ডক্সে রাখুন। আপনি এর Authorবা Titleসম্পত্তি সম্পাদনা করতে পারবেন না ।
  • এটি ওয়ার্ড দিয়ে খুলুন, সম্পাদনা করুন এবং এটি সংরক্ষণ করুন। এখন তুমি পার.

সুতরাং কিছু ব্যবহার নিশ্চিত করুন try catch

পরবর্তী বিষয়: এমএসডিএন: সম্পত্তি হ্যান্ডলারগুলি বাস্তবায়ন করছে


আমি মাইক্রোসফ্ট থেকে এই নামে কোনও প্যাকেজ দেখতে পাচ্ছি না
জ্যাকব ব্রুয়ার

1
@ জ্যাকবব্রেওয়ার এটি আসলে "অ্যাকডভোরাক" দ্বারা আপলোড করা হয়েছে: nuget.org/packages/Mic Microsoft.WindowsAPICodePack- শেল । ভিজ্যুয়াল স্টুডিও নুগেট-প্যাকেজ-ম্যানেজারে এটি "মাইক্রোসফ্ট দ্বারা" দেখানো হয়েছে। অনুরূপ নামের অন্যান্য প্যাকেজগুলি এর কাঁটাচামচ এবং এটি সঠিকভাবে বা এমনকি আরও ভাল কাজ করতে পারে। আমি জানি না ...
মার্টিন স্নাইডার

25

ভিবি.এনইটি-তে এই নমুনা সমস্ত বর্ধিত বৈশিষ্ট্য পড়ে:

Sub Main()
        Dim arrHeaders(35)

        Dim shell As New Shell32.Shell
        Dim objFolder As Shell32.Folder

        objFolder = shell.NameSpace("C:\tmp")

        For i = 0 To 34
            arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
        Next
        For Each strFileName In objfolder.Items
            For i = 0 To 34
                Console.WriteLine(i & vbTab & arrHeaders(i) & ": " & objfolder.GetDetailsOf(strFileName, i))
            Next
        Next

    End Sub

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


2
উইন্ডোজ on-তে (কমপক্ষে) আপনি এরিহাইডারগুলির আকার কেবল ২৮০-এর চেয়ে বেশি করতে এবং অতিরিক্ত মেটা-ডেটা প্রচুর পরিমাণে ফিরে পেতে পারেন Wor আমি যখন ডাব্লুটিভি ফাইল (উইন্ডোজ Media মিডিয়া সেন্টার রেকর্ডকৃত টেলিভিশন শো) থেকে মেটা-ডেটা পাওয়ার উপায় খুঁজছিলাম তখন আমি এটি খুঁজে পেয়েছি।
রিচার্ড

1
I = 0 থেকে 34 লুপের জন্য প্রথমটি i = 0 থেকে পূর্ণসংখ্যা.ম্যাক্সভ্যালুতে হওয়া উচিত। তারপরে অবজেক্ট ফোল্ডারটির রিটার্ন মানটি পরীক্ষা করুন et গেটডেটেলসফ (Fজেক্টফোল্ডার I আইটেমস, আই)। যদি এটি নাল বা হোয়াইটস্পেসের জায়গা ফিরে আসে তবে আপনার সমস্ত শিরোনাম রয়েছে।
টিম মারফি

@ টিমমারফি, দুর্ভাগ্যক্রমে, এটি সঠিক নয় (কমপক্ষে উইন্ডোজ 10 বা 7 এ)। কিছু শিরোনাম খালি রয়েছে, সুতরাং আপনাকে সমস্ত সূচকে লুপ করতে হবে। (অবশ্যই, যেহেতু তাদের মিলিয়ন নেই, তাই আপনি লুপটি 1000 এ সীমাবদ্ধ করতে পারেন))
স্কেস্ট

8

আপনাকে এই থ্রেডের জন্য ধন্যবাদ! যখন আমি কোনও এক্সির ফাইল সংস্করণ বের করতে চেয়েছিলাম তখন এটি আমাকে সহায়তা করেছিল। যাইহোক, আমাকে এক্সটেন্ডেড প্রোপার্টি বলে তার শেষ বিটটি বের করার দরকার ছিল।

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

এর সমাধান হ'ল সম্পত্তি সূচক ফোল্ডারআইটেম x এক্সটেন্ডেডপ্রোপার্টি এবং আপনি যদি সম্পত্তিটির নামে সমস্ত স্থান ফেলে দেন তবে আপনি মান পাবেন you'll উদাহরণস্বরূপ, ফাইল সংস্করণ ফাইল ভার্সন যায় এবং সেখানে আপনার এটি থাকে।

আশা করি এটি অন্য যে কোনও ব্যক্তিকে সহায়তা করবে, ভেবেছি এই থ্রেডটিতে এই তথ্যটি যুক্ত করব। চিয়ার্স!


2
এটিও নিশ্চিত করে যে আপনার কোডটি (কমপক্ষে বেশিরভাগ) এখনও অ-ইংরেজি ভাষার মেশিনে কাজ করবে work
এড নরিস

1
এখানে একটি ছোট উন্নতি, ফোল্ডারআইটিমে এক্সটেন্ডেডপ্রোপার্টি () নেই। ফোল্ডারআইটেম 2 তবে করে।
মিক্স্সিফয়েড

এই উত্তর অন্যদের তুলনায় স্বাচ্ছন্দ্যময়। : আমি নমুনা কোড দেওয়া আছে যে এখানে কাজ করে stackoverflow.com/a/46648086/661933
nawfal

8

GetDetailsOf()পদ্ধতি - একটি ফোল্ডারে কোনও আইটেম সম্পর্কে বিশদ পুনরুদ্ধার করে। উদাহরণস্বরূপ, এর আকার, প্রকার, বা এটির শেষ পরিবর্তনের সময়। Windows-OSসংস্করণটির ভিত্তিতে ফাইলের বৈশিষ্ট্যগুলি পৃথক হতে পারে ।

List<string> arrHeaders = new List<string>();

 Shell shell = new ShellClass();
 Folder rFolder = shell.NameSpace(_rootPath);
 FolderItem rFiles = rFolder.ParseName(filename);

 for (int i = 0; i < short.MaxValue; i++)
 {
      string value = rFolder.GetDetailsOf(rFiles, i).Trim();
      arrHeaders.Add(value);
 }

আমি উপরে একই কোড অনুলিপি এবং ব্যবহার করেছি। তবে, আমি এখানে রানিমে COM ব্যতিক্রম পাচ্ছি Folder rFolder = shell.NameSpace(_rootPath);। এফওয়াইআই, আমি উইন্ডোজ 8 ওএস ব্যবহার করছি।
ডোনম্যাক্স

1
সেই ত্রুটিটি কী? আপনি Shell32.dll এর সঠিক সংস্করণটি ব্যবহার করছেন তা নিশ্চিত করুন। এটি সম্ভবত এটি দরকারী হিসাবে দেখুন
রাজেশকদেব

1
উপরের লিঙ্কের জন্য +1। আপনার প্রস্তাবিত লিঙ্কটি ঠিকঠাক কাজ করছে। তোমার কাছে আমার আরও একটি সাহায্য দরকার অর্থাত্, মেটাডেটা পেতে আমি কীভাবে একক ফাইলটি পাস করতে পারি ?? যেহেতু, এটি কেবল ফোল্ডারটি পাস করার জন্য গ্রহণ করে।
ডোনম্যাক্স

6
  • এই থ্রেড এবং অন্য কোথাও বেশ কয়েকটি সমাধান দেখার পরে নীচের কোডটি একসাথে রাখা হয়েছিল। এটি কেবল কোনও সম্পত্তি পড়ার জন্য।
  • আমি শেল 32. ফোল্ডার আইটেম 2. এক্সটেন্ডেডপ্রোপার্টি ফাংশনটি কাজ করতে পারিনি, মনে করা হয় এটি একটি স্ট্রিং মান নেবে এবং সেই সম্পত্তিটির জন্য সঠিক মান এবং টাইপটি ফিরিয়ে নেবে ... এটি আমার পক্ষে সর্বদা বাতিল ছিল এবং বিকাশকারী রেফারেন্স সংস্থানগুলি খুব পাতলা ছিল।
  • WindowsApiCodePack যা আমাদের নিচের কোড এনেছে Microsoft দ্বারা পরিত্যক্ত হয়েছে বলে মনে হয়।

ব্যবহার করুন:

string propertyValue = GetExtendedFileProperty("c:\\temp\\FileNameYouWant.ext","PropertyYouWant");
  1. প্রদত্ত ফাইল এবং সম্পত্তির নামের জন্য স্ট্রিং হিসাবে আপনি যে প্রসারিত সম্পত্তির চান তার মান ফিরিয়ে দেবে।
  2. সুনির্দিষ্ট সম্পত্তি না পাওয়া পর্যন্ত কেবল লুপগুলি - সমস্ত বৈশিষ্ট্য কিছু নমুনা কোডের মতো আবিষ্কার না হওয়া অবধি নয়
  3. উইন্ডোজ সার্ভার ২০০৮ এর মতো উইন্ডোজ সংস্করণগুলিতে কাজ করবে যেখানে আপনি ত্রুটিটি পেয়ে যাবেন "সিস্টেম 'টাইপের সিওএম অবজেক্টটি কাস্ট করতে ব্যর্থ" O

    public static string GetExtendedFileProperty(string filePath, string propertyName)
    {
        string value = string.Empty;
        string baseFolder = Path.GetDirectoryName(filePath);
        string fileName = Path.GetFileName(filePath);
    
        //Method to load and execute the Shell object for Windows server 8 environment otherwise you get "Unable to cast COM object of type 'System.__ComObject' to interface type 'Shell32.Shell'"
        Type shellAppType = Type.GetTypeFromProgID("Shell.Application");
        Object shell = Activator.CreateInstance(shellAppType);
        Shell32.Folder shellFolder = (Shell32.Folder)shellAppType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shell, new object[] { baseFolder });
    
        //Parsename will find the specific file I'm looking for in the Shell32.Folder object
        Shell32.FolderItem folderitem = shellFolder.ParseName(fileName);
        if (folderitem != null)
        {
            for (int i = 0; i < short.MaxValue; i++)
            {
                //Get the property name for property index i
                string property = shellFolder.GetDetailsOf(null, i);
    
                //Will be empty when all possible properties has been looped through, break out of loop
                if (String.IsNullOrEmpty(property)) break;
    
                //Skip to next property if this is not the specified property
                if (property != propertyName) continue;    
    
                //Read value of property
                value = shellFolder.GetDetailsOf(folderitem, i);
            }
        }
        //returns string.Empty if no value was found for the specified property
        return value;
    }

1
নোট করুন যে ইনভোকেমবার () ব্যবহার না করে আপনি shellযে কোনও IShellDispatchইন্টারফেসে (1-6) কাস্ট করতে পারেন এবং সদস্যকে সরাসরি কল করতে পারেন। Shell32.IShellDispatch ishell = (Shell32.IShellDispatch)shell; Shell32.Folder shellFolder = ishell.NameSpace(baseFolder);
skst

5

জারকের উত্তরটি কিছুটা সহজ। এখানে নমুনা কোড যা এমএস থেকে কাজ করে :

var folder = new Shell().NameSpace(folderPath);
foreach (FolderItem2 item in folder.Items())
{
    var company = item.ExtendedProperty("Company");
    var author = item.ExtendedProperty("Author");
    // Etc.
}

যারা স্থায়ীভাবে শেল 32 উল্লেখ করতে পারেন না তাদের জন্য আপনি এটিকে গতিশীলভাবে অনুরোধ করতে পারেন:

var shellAppType = Type.GetTypeFromProgID("Shell.Application");
dynamic shellApp = Activator.CreateInstance(shellAppType);
var folder = shellApp.NameSpace(folderPath);
foreach (var item in folder.Items())
{
    var company = item.ExtendedProperty("Company");
    var author = item.ExtendedProperty("Author");
    // Etc.
}

1

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

সম্পাদনা: আমি লিগলটি ট্যাগলিবকে তীক্ষ্ণভাবে আপডেট করেছি। পুরানো লিঙ্কটি আর কাজ করে না।

সম্পাদনা: kzu এর মন্তব্যে লিঙ্কটি আরও একবার আপডেট হয়েছে।


এটি দেখতে খুব আকর্ষণীয় দেখাচ্ছে, আমি মূলত ভিডিও ফাইলগুলি দেখব (এভিআই, ডিআইভিএক্স ইত্যাদি)। পয়েন্টারের জন্য ধন্যবাদ
ডেভিড হেইস

ট্যাগলিব-তীক্ষ্ণ লিঙ্কটি মৃত বলে মনে হচ্ছে :-( - যা উইকি হিসাবে অদ্ভুত ... ... বিকাশকারী.নোভেল .
com/

ধন্যবাদ, স্টিভসি, আমি যখন পোস্ট করেছি তখন এই দুটি লিঙ্কই বৈধ ছিল এবং আমি নিশ্চিত ছিলাম না যে কোনটি সরকারী জায়গা হবে, দেখে মনে হচ্ছে উপন্যাসটি এখন এই লাইব করার জন্য সঠিক সাইট।
মকোবজেক্ট

মাথা আপ কেজু করার জন্য ধন্যবাদ, আমি গিথুব অবস্থানের দিকেও নির্দেশ করতে আমার মূল উত্তরে লিঙ্কটি আপডেট করেছি।
মকোবজেক্ট

1

লেখার জন্য নয় - পড়ার জন্য এখানে একটি সমাধান রয়েছে যা আমি এই পৃষ্ঠায় এবং শেল 32 অবজেক্টগুলির সাহায্যে যা পেয়েছি তার ভিত্তিতে বর্ধিত বৈশিষ্ট্য ।

পরিষ্কার হওয়ার জন্য এটি হ্যাক। দেখে মনে হচ্ছে এই কোডটি এখনও উইন্ডোজ 10 এ চলবে তবে কিছু খালি বৈশিষ্ট্যে আঘাত করবে। উইন্ডোজের পূর্ববর্তী সংস্করণটি ব্যবহার করা উচিত:

        var i = 0;
        while (true)
        {
            ...
            if (String.IsNullOrEmpty(header)) break;
            ...
            i++;

উইন্ডোজ 10 এ আমরা ধরে নিই যে খালি এন্ট্রিগুলি পড়তে এবং এড়াতে এখানে প্রায় 320 টি বৈশিষ্ট্য রয়েছে:

    private Dictionary<string, string> GetExtendedProperties(string filePath)
    {
        var directory = Path.GetDirectoryName(filePath);
        var shell = new Shell32.Shell();
        var shellFolder = shell.NameSpace(directory);
        var fileName = Path.GetFileName(filePath);
        var folderitem = shellFolder.ParseName(fileName);
        var dictionary = new Dictionary<string, string>();
        var i = -1;
        while (++i < 320)
        {
            var header = shellFolder.GetDetailsOf(null, i);
            if (String.IsNullOrEmpty(header)) continue;
            var value = shellFolder.GetDetailsOf(folderitem, i);
            if (!dictionary.ContainsKey(header)) dictionary.Add(header, value);
            Console.WriteLine(header +": " + value);
        }
        Marshal.ReleaseComObject(shell);
        Marshal.ReleaseComObject(shellFolder);
        return dictionary;
    }

উল্লিখিত হিসাবে আপনাকে কম এসেম্বলি ইন্টারপ। শেল 32 উল্লেখ করতে হবে।

আপনি যদি কোনও এসটিএ সম্পর্কিত ব্যতিক্রম পান তবে আপনি সমাধানটি এখানে পাবেন:

ফাইল বর্ধিত বৈশিষ্ট্য পেতে শেল 32 ব্যবহার করার সময় ব্যতিক্রম

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

বিটিডব্লিউ এটি মারাত্মক ধীর এবং - কমপক্ষে উইন্ডোজ 10 এ - পুনরুদ্ধার করা স্ট্রিংয়ের তারিখগুলি পার্স করা একটি চ্যালেঞ্জ হতে পারে তাই এটির ব্যবহার শুরু করা খারাপ ধারণা বলে মনে হয়।

উইন্ডোজ 10-এ আপনার অবশ্যই উইন্ডোজ.স্টোরেজ লাইব্রেরিটি ব্যবহার করা উচিত যা সিস্টেমফোটোপ্রপারটিস, সিস্টেমমিউজিকপ্রোপার্টি ইত্যাদি রয়েছে https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties

এবং অবশেষে, আমি একটি আরও ভাল সমাধান পোস্ট করেছি যা সেখানে উইন্ডোজএপিকোডপ্যাক ব্যবহার করে

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