سؤال

إذا كان لدي الكثير من دليل الأسماء إما حرفية سلاسل أو الواردة في المتغيرات, ما هي أسهل طريقة الجمع بين هذه إلى جعل الطريق ؟

أنا أعرف من

Path.Combine
ولكن هذا يستغرق سوى 2 سلسلة المعلمات ، أنا بحاجة إلى حل يمكن أن تأخذ أي عدد عدد الدليل المعلمات.

هـ.g:

string folder1 = "foo";
string folder2 = "bar";

CreateAPath("C:", folder1, folder2, folder1, folder1, folder2, "MyFile.txt")

أي أفكار ؟ هل C# دعم غير محدود وسائط في الأساليب ؟

هل كانت مفيدة؟

المحلول

هل C# دعم غير محدود وسائط في الأساليب ؟

نعم, إلقاء نظرة على params الكلمة.سوف تجعل من السهل لكتابة وظيفة فقط المكالمات المسار.الجمع بين العدد المناسب من الأوقات مثل هذا (لم تختبر):

string CombinePaths(params string[] parts) {
    string result = String.Empty;
    foreach (string s in parts) {
        result = Path.Combine(result, s);
    }
    return result;
}

نصائح أخرى

LINQ لانقاذ مرة أخرى.على الكلي تمديد وظيفة يمكن استخدامها لإنجاز ما تريد.النظر في هذا المثال:

string[] ary = new string[] { "c:\\", "Windows", "System" };
string path = ary.Aggregate((aggregation, val) => Path.Combine(aggregation, val));
Console.WriteLine(path); //outputs c:\Windows\System

أنا أفضل أن استخدام DirectoryInfo مقابلفإن أساليب ثابتة على الدليل ، لأنني أعتقد أنه من الأفضل OO التصميم.هنا الحل مع DirectoryInfo + امتداد الطرق التي أعتقد أنها لطيفة جدا استخدام:

    public static DirectoryInfo Subdirectory(this DirectoryInfo self, params string[] subdirectoryName)
    {
        Array.ForEach(
            subdirectoryName, 
            sn => self = new DirectoryInfo(Path.Combine(self.FullName, sn))
            );
        return self;
    }

أنا لا أحب حقيقة أنني تعديل self, ولكن هذا باختصار طريقة أعتقد أنها أنظف من صنع متغير جديد.

دعوة موقع يعوض عن ذلك ، على الرغم من:

        DirectoryInfo di = new DirectoryInfo("C:\\")
            .Subdirectory("Windows")
            .Subdirectory("System32");

        DirectoryInfo di2 = new DirectoryInfo("C:\\")
            .Subdirectory("Windows", "System32");

إضافة إلى FileInfo ترك تمرين (آخر حتى السؤال!).

هذه محاولة واحدة:

public static string CreateDirectoryName(string fileName, params string[] folders)
{
    if(folders == null || folders.Length <= 0)
    {
        return fileName;
    }

    string directory = string.Empty;
    foreach(string folder in folders)
    {
        directory = System.IO.Path.Combine(directory, folder);
    }
    directory = System.IO.Path.Combine(directory, fileName);

    return directory;
}

على params يجعل من ذلك أنه يمكنك إلحاق مبلغ لا حصر له من السلاسل.

مسار.الجمع هل هو التأكد من أن إدخال سلاسل لا يبدأ أو ينتهي مع المائلة يتحقق أي أحرف غير صالحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top