2014-09-26 4 views
2

는 (물론 다른-이상 경로가 될 수있다) 나는 문자열이 입력 (기본 디렉토리)가 말 :는 전체 경로에서 (또한 파일 이름) 기본 디렉토리를 제외

c:\Projects\ (could be also c:\Projects) 

이 입력을 같은 문자열을 얻을 수있는 가장 좋은 방법은 무엇

c:\Projects\bin\file1.exe 
c:\Projects\src\folder\file2.exe 

:이다

bin 
src\folder 

을에서 문자열로 (하위 디렉토리에있는 파일) 전체 경로 (그 주어진) 기본 디렉토리와 파일 이름을 제외하고 싶습니다.

답변

3

다음과 같은 논리를 따를 수 있습니다.

string root = @"c:\Projects"; 
string path = @"c:\Projects\src\folder\file2.exe"; 

path = path.Replace(root, "").Replace(Path.GetFileName(path), "").Trim('\\'); 

Console.WriteLine(path); 
  1. 은 빈 문자열이 기본 디렉토리 (확장자) 파일 이름을 바꿉니다.
  2. 합니다 (처음 두 항목을 생략합니다, 당신은

    string s = @"c:\Projects\bin\file1.exe"; 
    var split_s = s.Split(new char[]{'\\'}).Skip(2); 
    Console.WriteLine(string.Join(@"\", split_s.Take(split_s.Count() - 1).ToArray())); 
    

    Example IDEONE

    이것은 슬래시에서 문자열을 분할 사용할 수 있습니다 bin\ 또는 src\folder\

1

\ 문자 수 끝을 낸다 드라이브 및 프로젝트 폴더)를 찾은 다음 파일 이름을 제외하고 다음 X 개의 디렉토리를 사용합니다. 그런 다음 다시 결합합니다.

1

당신은 주어진 하나에 대한 상대 부모 경로 계산하기 위해 다음과 같은 정적 인 방법을 사용할 수 있습니다

public static string GetRelativeParentPath(string basePath, string path) 
    { 
     return GetRelativePath(basePath, Path.GetDirectoryName(path)); 
    } 

    public static string GetRelativePath(string basePath, string path) 
    { 
     // normalize paths 
     basePath = Path.GetFullPath(basePath); 
     path = Path.GetFullPath(path); 

     // same path case 
     if (basePath == path) 
      return string.Empty; 

     // path is not contained in basePath case 
     if (!path.StartsWith(basePath)) 
      return string.Empty; 

     // extract relative path 
     if (basePath[basePath.Length - 1] != Path.DirectorySeparatorChar) 
     { 
      basePath += Path.DirectorySeparatorChar; 
     } 

     return path.Substring(basePath.Length); 
    } 

을 그리고 이것은 당신이 그것을 사용할 수있는 방법입니다

static void Main(string[] args) 
    { 
     string basePath = @"c:\Projects\"; 
     string file1 = @"c:\Projects\bin\file1.exe"; 
     string file2 = @"c:\Projects\src\folder\file2.exe"; 

     Console.WriteLine(GetRelativeParentPath(basePath, file1)); 
     Console.WriteLine(GetRelativeParentPath(basePath, file2)); 
    } 

출력 :

bin 
src\folder 
0

문자열의 그대로 Regex도 사용할 수 있습니다.

string ResultString = null; 
try { 
    ResultString = Regex.Match(SubjectString, "c:\\\\Projects\\\\(?<data>.*?)\\\\(\\w|\\d)*  (\\.exe|.png|jpeg)", 
    RegexOptions.Multiline).Groups["data"].Value; 
} catch (ArgumentException ex) { 
// Syntax error in the regular expression 
} 

제외 또는 내가 PNG로 추가 jpeg.Drawback 문자열의 처음 부분은 C에서 시작해야처럼 많은 파일 형식을 포함 할 수 있습니다 :/프로젝트

관련 문제