কীভাবে কয়েকটি ফোল্ডার নেভিগেট করবেন?


115

একটি বিকল্প হ'ল সিস্টেম.আইও.ডাইরেক্টরি.গেটপ্যারেন্ট () কয়েকবার করুন। কার্যনির্বাহী সমাবেশটি যেখান থেকে বাস করে সেখান থেকে কয়েক ফোল্ডারে আরও বেশি ভ্রমণ করার কি আরও সুন্দর উপায় আছে?

আমি যা করার চেষ্টা করছি তা হ'ল অ্যাপ্লিকেশন ফোল্ডারের উপরে একটি ফোল্ডার থাকা একটি পাঠ্য ফাইল সন্ধান করা। তবে সমাবেশটি নিজেই বিনের অভ্যন্তরে রয়েছে যা অ্যাপ্লিকেশন ফোল্ডারের গভীরে কয়েকটি ফোল্ডার।


2
সাধারণত কোনও আপেক্ষিক পথটি '.. \ .. \ .. \ .. \ .. \ ডাউনফোল্ডার' এর মতো কৌতুক করে তবে আপনি ঠিক কী জন্য এটি করার চেষ্টা করছেন তার উপর নির্ভর করে ...?
ডিস্কজঙ্কি

এই সবসময় ক্ষেত্রে?
CR41G14

4
"নেভিগেট" কিভাবে? আপনি কি বর্তমান ডিরেক্টরি বলতে চান? যদি তা হয় তবে আপনার করা উচিতDirectory.SetCurrentDirectory(@"..\..\..\..");
পিটার রিচি

উত্তর:


211

অন্যান্য সহজ উপায় এটি করা:

string path = @"C:\Folder1\Folder2\Folder3\Folder4";
string newPath = Path.GetFullPath(Path.Combine(path, @"..\..\"));

দ্রষ্টব্য এটি দুই স্তরের উপরে যায়। ফলাফলটি হবে: newPath = @"C:\Folder1\Folder2\";


18
Path.Combineআপনি যেকোনভাবে ম্যানুয়ালি ব্যাকস্ল্যাশ যুক্ত করার সময় ব্যবহার করার কোনও মানে নেই। Path.Combine(path, "..", "..")পরিবর্তে ব্যবহার বিবেচনা করুন ।
এক্সএমআইএম

32

যদি সি: \ ফোল্ডার 1 \ ফোল্ডার 2 \ ফোল্ডার 3 \ বিনটি পাথ হয় তবে নীচের কোডটি বিন ফোল্ডারের পাথ বেস ফোল্ডারটি ফিরিয়ে দেবে

//string directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString());

string directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString();

অর্থাত, C: \ FOLDER1 \ folder2 \ folder3

আপনি যদি ফোল্ডার 2 পাথ চান তবে আপনি ডিরেক্টরিটি পেতে পারেন

string directory = System.IO.Directory.GetParent(System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString()).ToString();

তাহলে আপনি সি: path ফোল্ডার 1 \ ফোল্ডার 2 \ হিসাবে পাথ পাবেন


12

আপনি ..\pathএক স্তর উপরে ..\..\pathযেতে , পথ থেকে দুই স্তর উপরে যেতে ব্যবহার করতে পারেন ।

আপনি ক্লাসও ব্যবহার করতে পারেন Path

সি # পাথ ক্লাস


6

এটিই আমার পক্ষে সবচেয়ে ভাল কাজ করেছে:

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));

'ডান' পাথ পেতে সমস্যা ছিল না, যোগ করা '../' স্পষ্টতই তা করে, তবে এর পরে প্রদত্ত স্ট্রিংটি ব্যবহারযোগ্য নয়, কারণ এটি শেষে '../' যুক্ত করবে। এটির চারপাশে Path.GetFullPath()আপনাকে ব্যবহারের উপযোগী করে তুলবে পরম পথ path


4

নিম্নলিখিত পদ্ধতিটি অ্যাপ্লিকেশন স্টার্টআপ পাথ (* .exe ফোল্ডার) দিয়ে শুরু করে একটি ফাইল সন্ধান করে। যদি ফাইলটি সেখানে না পাওয়া যায় তবে ফাইল সন্ধান না করা বা রুট ফোল্ডার না পাওয়া পর্যন্ত পিতামাতার ফোল্ডারগুলি অনুসন্ধান করা হয়। nullফাইলটি পাওয়া না গেলে ফিরে আসে।

public static FileInfo FindApplicationFile(string fileName)
{
    string startPath = Path.Combine(Application.StartupPath, fileName);
    FileInfo file = new FileInfo(startPath);
    while (!file.Exists) {
        if (file.Directory.Parent == null) {
            return null;
        }
        DirectoryInfo parentDir = file.Directory.Parent;
        file = new FileInfo(Path.Combine(parentDir.FullName, file.Name));
    }
    return file;
}

দ্রষ্টব্য: Application.StartupPathসাধারণত উইনফোর্স অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয় তবে এটি কনসোল অ্যাপ্লিকেশনগুলিতেও কাজ করে; তবে আপনাকে System.Windows.Formsবিধানসভাতে একটি রেফারেন্স সেট করতে হবে । আপনি প্রতিস্থাপন করতে পারেন Application.StartupPathদ্বারা
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)যদি আপনি পছন্দ।


4

আপনি যদি স্তরগুলির সংখ্যা ঘোষণা করতে এবং কোনও ফাংশনে রেখে দিতে চান তবে আপনি কোনও ফাংশন ব্যবহার করতে পারেন?

private String GetParents(Int32 noOfLevels, String currentpath)
{
     String path = "";
     for(int i=0; i< noOfLevels; i++)
     {
         path += @"..\";
     }
     path += currentpath;
     return path;
}

এবং আপনি এটিকে কল করতে পারেন:

String path = this.GetParents(4, currentpath);

2

সি শার্প

string upTwoDir = Path.GetFullPath(Path.Combine(System.AppContext.BaseDirectory, @"..\..\"));

1

এটি সাহায্য করতে পারে

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../../")) + "Orders.xml";
if (File.Exists(parentOfStartupPath))
{
    // file found
}

1

আমার কিছু ভার্চুয়াল ডিরেক্টরি রয়েছে এবং আমি ডিরেক্টরি পদ্ধতি ব্যবহার করতে পারি না। সুতরাং, আমি আগ্রহীদের জন্য একটি সাধারণ বিভক্ত / যোগদানের ফাংশন করেছি। যদিও নিরাপদ নয়।

var splitResult = filePath.Split(new[] {'/', '\\'}, StringSplitOptions.RemoveEmptyEntries);
var newFilePath = Path.Combine(filePath.Take(splitResult.Length - 1).ToArray());

সুতরাং, আপনি যদি 4 টি উপরে যেতে চান তবে ব্যতিক্রমগুলি এড়াতে আপনার কেবলমাত্র পরিবর্তন করতে 1হবে 4এবং কয়েকটি চেক যুক্ত করতে হবে।


0

আপনি যে ফোল্ডারে নেভিগেট করতে চান তা যদি জানেন তবে তার সূচীটি তারপরে সাবস্ট্রিংটি সন্ধান করুন।

            var ind = Directory.GetCurrentDirectory().ToString().IndexOf("Folderame");

            string productFolder = Directory.GetCurrentDirectory().ToString().Substring(0, ind);

2
এটি অনেক ক্ষেত্রে ব্যর্থ হয় । aউদাহরণস্বরূপ, যদি ফোল্ডারের নামটি ঠিক হয় তবে কী হবে ? পথটি যদি এমন দেখায় তবে কী হবে C:\Folderame3\Folderame2\Folderame\...?
41686d6564

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