সি # তে হোম ডিরেক্টরিটির পথ পাচ্ছেন?


106

ঠিক আছে, আমি এনভায়রনমেন্ট.স্পেশিয়াল ফোল্ডার চেক করেছি, কিন্তু এর জন্য এখানে কিছুই নেই।

আমি সি # তে বর্তমান ব্যবহারকারীর হোম ডিরেক্টরি পেতে চাই। (যেমন c:\documents and settings\userএক্সপি এর c:\users\userঅধীনে, ভিস্তার /home/userঅধীনে এবং ইউনিক্সের অধীনে))

আমি জানি আমি এটি খুঁজে পেতে পরিবেশগত পরিবর্তনগুলি পড়তে পারি তবে আমি ক্রস-প্ল্যাটফর্মের উপায়ে এটি করতে চাই।

.NET (অগ্রাধিকারে mscorlib ব্যবহার করে) দিয়ে এটি করার কোনও উপায় আছে কি?

আপডেট : ঠিক আছে, এই কোডটি আমি ব্যবহার করে শেষ করেছি:

string homePath = (Environment.OSVersion.Platform == PlatformID.Unix || 
                   Environment.OSVersion.Platform == PlatformID.MacOSX)
    ? Environment.GetEnvironmentVariable("HOME")
    : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");

4
বুম পশ্চিমে দ্রুততম বন্দুক: পি
— বরিস কলেনস

আপনার মেশিন সম্পর্কে ডান্নো, তবে আমার এক্সপি বক্সে% হোমড্রাইভ %% হোমপথ% একটি নেটওয়ার্ক ডিরেক্টরি যা সি: \ ডকুমেন্টস এবং সেটিংসের ব্যবহারকারী ters এমএসএলটারস \
— এমএসএলটারস

সৎ হতে, আমি ঠিক এই সমস্যা বিবেচনা .NET একজন underimplementation হতে ... আপনি CSIDLS ডকুমেন্টেশন তাকান উচিত ( msdn.microsoft.com/en-us/library/bb762494.aspx ) এর সম্পূর্ণ তালিকা দেখতে উইন্ডোজ কী সমর্থন করে: আপনি আসলে যা খুঁজছেন তা হ'ল সিএসআইডিএল_পিআরএফআইএল, যা উইন্ডোজে সমর্থিত, তবে কিছু অপ্রয়োজনীয় কারণে। নেট দ্বারা নয়।
— ম্যাথু শার্লে

4
আমি মনে করি আপনার ফলাফলটি পরবর্তী বার দেওয়া উচিত।
— পিটার

প্ল্যাটফর্মআইডি.ম্যাকোএসএক্স প্রয়োজন হয় না, প্ল্যাটফর্মআইডি.উনিক্স ম্যাকোএসএক্স-এও সত্য (সত্যই প্রত্যাখ্যান করে) returns
— স্টিফান স্টেইগার

উত্তর:


52

Environment.SpecialFolder.Personalআসলে হোম ফোল্ডারটি ফিরিয়ে দেয় না, এটি আমার ডকুমেন্টস ফোল্ডারটি দেয়। উইন 32 এ হোম ফোল্ডারটি পাওয়ার সবচেয়ে নিরাপদ উপায়টি হ'ল পঠন %HOMEDRIVE%%HOMEPATH%। পরিবেশের ভেরিয়েবলগুলি পড়া (আসলে ইউনিক্স এবং উইন্ডোজুড়ে) খুব পোর্টেবল, সুতরাং কেন পোস্টারটি এটি না করতে চেয়েছিল তা আমি নিশ্চিত নই ।

যুক্ত করতে সম্পাদিত: ক্রসপ্ল্যাটফর্মের জন্য (উইন্ডোজ / ইউনিক্স) সি #, আমি $HOMEইউনিক্স এবং ওএসএক্স এবং %HOMEDRIVE%%HOMEPATH%উইন্ডোতে পড়তাম ।


আমি জানি যে হোমড্রাইভ * নিক্সের অস্তিত্ব নেই এবং সাধারণত এটি কেবল হোম হয়, হোমপথ নয়।
— ম্যাথু শার্লে

ম্যাথু, আপনি ঠিক বলেছেন। আমি মূল মন্তব্যে একটি ব্যাখ্যা যুক্ত করেছি।
— sigint

12
আপনি কি উইন্ডোজে% USERPROFILE% ব্যবহার করতে পারবেন না?
— লুকাস জোনস

4
OME হোম ওএস এক্সেও কাজ করে। আমি এখনও যতটা উদ্বিগ্ন তা এখনও সঠিক উত্তর নয় যদিও আপনি প্ল্যাটফর্ম সনাক্তকরণ করছেন ... তবে সঠিক মানের জন্য জিজ্ঞাসা করা, এটি আপনাকে যা করতে হবে তা সম্পর্কে।
— ম্যাথু শার্লে

4
ব্যক্তি-বি,% ব্যবহারকারীপ্রাপ্ত% এবং% হোমড্রাইভ %% হোমপথ% ব্যক্তিগত পিসিগুলিতে প্রায়শই একই রকম থাকে তবে প্রায়শই নেটওয়ার্কযুক্ত পরিবেশে বিভিন্ন জায়গাগুলি নির্দেশ করে। উদাহরণস্বরূপ, কর্মক্ষেত্রে আমার ব্যবহারকারীর নাম সি: \ নথি এবং সেটিংস \ ব্যবহারকারীর নাম তবে হোম ডিরেক্টরিটি জেড: \, এটি আইটি দ্বারা নিয়মিত ব্যাক আপ করা একটি নেটওয়ার্ক ড্রাইভ।
— sigint

97
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)

ব্যক্তিগত হ'ল আমার ডকুমেন্টস (বা উইন 7 এবং তারপরে ডকুমেন্টস)।


8
নোট করুন যে ইউজারপ্রোফাইল .NET 4.0 এ নতুন, আপনি যদি নেট 2.0 / 3.5 ব্যবহার করেন তবে
— ইউজারপ্রাইফিলির

এবং "আমার ডকুমেন্টস" উইন্ডোজ 95, 98 এবং এমই ব্যতীত হোম ডিরেক্টরি হিসাবে একই নয়।
— জন হান্না

4
পোর্টেবল রাখার জন্য আপনার ফাইলের পাথ তৈরির জন্য System.IO.Path.DirectorySeparatorChar ব্যবহার করতে ভুলবেন না।
— থোমিল

5
ডিরেক্টরীসপেটরচর ম্যানুয়ালি ব্যবহার করবেন না। পাথ.কোমাইন ব্যবহার করুন।
— জন গিটেজেন

15

আমি বিশ্বাস করি আপনি যা খুঁজছেন তা হ'ল:

System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)

রেফারেন্সের জন্য, এটি আসলে অন্তর্ভুক্ত রয়েছে mscorlib।


এটি আমার ডকুমেন্টস ফোল্ডারটি দেয়।
— মিফ দফক্স

"আমার ডকুমেন্টস" হয় সর্বনিকটবর্তী বস্তু উইন্ডোজ একটি বাড়িতে নির্দেশিকাতে হয়েছে।
— এমসাল্টাররা 14

8
@ এসএমএল টালার্স না,% হোমড্রাইভ %% হোমপ্যাট%%
— মিফ দ্য ফক্স

বেশ নয় ... তবে বিকল্পটি পিনভোক, এবং ওপি একটি পরিচালিত সমাধান চেয়েছিল।
— ম্যাথু শার্লে

7
নোট করুন যে এনভায়রনমেন্ট.স্পেশিয়াল
— ফোল্ডার.ইউসারপ্রোফাইলটি

8

ডটনেটকরে 1.1 এর System.Environment.SpecialFolderঅস্তিত্ব নেই। এটি 2.0-বিটাতে থাকতে পারে। ততক্ষণে এটি করার জন্য আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

var envHome = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "HOMEPATH" : "HOME";
var home = Environment.GetEnvironmentVariable(envHome);`

আমি 2.0 ব্যবহার করছি এবং System.Environment.SpecialFolderউপস্থিত
— রয়েছি

4

নীচের লাইনের উত্তরটি হ'ল না। হোম ডিরেক্টরিটি পাওয়ার জন্য নেট .NET- তে কোনও সহজ সিস্টেম ভিত্তিক পদ্ধতি নয় যা আমরা উইন্ডোজ এবং মনোতে উভয় .NET এ বাস্তবায়ন আশা করতে পারি।

আপনাকে ওএস নির্দিষ্ট কোডে কিছু ওএস সনাক্তকরণ এবং শাখা করতে হবে।


1

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

এই ওয়েবসাইটটি উইন্ডোজে আপনার যা প্রয়োজন তা করার একটি উপায় বলে মনে হচ্ছে।


যদি না আপনি ফ্রেমওয়ার্ক এনভায়রনমেন্টের কিছুটা ব্রিনেডিড প্রয়োগ ব্যবহার করেন। গেটফোল্ডার () ক্রস প্ল্যাটফর্মের কাজ করা উচিত।
— আর মার্টিনহো ফার্নান্দেস

4
উচিত । এমএসের বাস্তবায়ন এটি করে না।
— আর মার্টিনহো ফার্নান্দেস

1

এই ব্যবহার করা যেতে পারে GetEnvironmentVariableযে System.IO:

public string GetUserHome() {
    var homeDrive = Environment.GetEnvironmentVariable("HOMEDRIVE");
    if (!string.IsNullOrWhiteSpace(homeDrive))
    {
        var homePath = Environment.GetEnvironmentVariable("HOMEPATH");
        if (!string.IsNullOrWhiteSpace(homePath))
        {            
            var fullHomePath = homeDrive + Path.DirectorySeparatorChar + homePath;
            return Path.Combine(fullHomePath, "myFolder");
        }
        else
        {
            throw new Exception("Environment variable error, there is no 'HOMEPATH'");
        }
    }
    else
    {
        throw new Exception("Environment variable error, there is no 'HOMEDRIVE'");
    }
}

তারপরে এটি উইন্ডোগুলির নীচে উত্পাদন করে: C:\\\\Users\\myusername\\myFolder

আপনি যদি ব্যবহার করেন তবে নোট করুন

var fullHomePath = Path.Combine(homeDrive.ToString(), homePath.ToString())

এটি ব্যর্থ হয় কারণ এটি উত্পাদন করে: \\Users\\myusername\\myFolder


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