문제

가 있는 경우 많은 디렉토리의 이름 중 하나로 문자열이나 포함되는 변수에 있는 가장 쉬운 방법은 무엇입니까 결합의 이러한 전체 경로?

나의 알

Path.Combine
하지만 이것은 단지 2 매개 변수 문자열,저는 솔루션이 필요할 수 있는 어떤 숫자의 번호를 directory 매개 변수입니다.

e.g:

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

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

어떤 아이디어가?은 C#을 지원한 args 에서는 방법?

도움이 되었습니까?

해결책

C#은 메소드에서 무제한 ARG를 지원합니까?

예, Params 키워드를 살펴보십시오. 이와 같은 (테스트되지 않은)와 같이 Path.comBine을 호출하는 함수를 쉽게 작성할 수 있습니다.

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

내가 사용하는 것을 선호 또는 파일 이름이 시 대정적 방법에 디렉터리 생각하기 때문에,그것의 더 나은 OO 디자인이다.여기에 솔루션 또는 파일 이름이 시+장 방법,즉 생각은 매우 좋은 사용:

    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;
}

매개 변수는 무한 양의 문자열을 추가 할 수 있도록합니다.

Path.comBine은 입력 된 문자열이 슬래시로 시작하거나 끝나지 않도록하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top