2010-04-13 2 views
0

하나 이상의 문자가있는 경우 특정 문자를 선택하기 위해 IndexOf를 SubString과 함께 사용하려면 어떻게해야합니까? 여기에 내 문제가있다. "C : \ Users \ Jim \ AppData \ Local \ Temp \"경로를 가져 와서 "Temp \"부분을 ​​제거하고 싶습니다. 그냥 "C : \ Users \ Jim \ AppData \ Local \"떠나는 아래 코드를 사용하여 내 문제를 해결할 수 있지만 "Temp"폴더 실제로 "Temp"라는 가정합니다. 더 좋은 방법이 있습니까? 이 경로가 이미 될 운명 것을 이해하지 않는 한,하나 이상의 문자가있는 경우 IndexOf를 사용하여 특정 문자를 선택하려면 어떻게해야합니까?

using System; 
using System.IO; 

class Test 
{ 
    static void Main() 
    { 
     string path = @"C:\Users\Jim\AppData\Local\Temp\"; 
     DirectoryInfo dir = new DirectoryInfo(path); 
     DirectoryInfo parent = dir.Parent; 
     Console.WriteLine(parent.FullName); 
    }  
} 

(Directory.GetParent(path)가 당신에게 임시 디렉토리를 제공합니다 : 감사는

if (Path.GetTempPath() != null) // Is it there?{ 
tempDir = Path.GetTempPath(); //Make a string out of it. 
int iLastPos = tempDir.LastIndexOf(@"\"); 
if (Directory.Exists(tempDir) && iLastPos > tempDir.IndexOf(@"\")) 
{ 
    // Take the position of the last "/" and subtract 4. 
    // 4 is the lenghth of the word "temp". 
    tempDir = tempDir.Substring(0, iLastPos - 4); 
}} 
+0

명확히하기 위해 경로의 마지막 서브 디렉토리를 임시 디렉토리인지 여부에 관계없이 제거하고 싶습니까? – Drew

+0

예, TEMP 또는 TMP 중 하나가 될 것입니다 – JimDel

답변

2

System 클래스를 사용하여 직접 처리하지 않는 이유는 무엇입니까?

string folder = Environment.GetFolder(Environment.SpecialFolder.LocalApplicationData); 
0

나는 DirectoryInfo 클래스를 사용합니다.

DirectoryInfo tempDirectory = new DirectoryInfo(Path.GetTempPath());    
DirectoryInfo tempDirectoryParent = tempDirectory.Parent; 
1

다른 답변자가 목표를 달성하는 가장 좋은 방법을 보여주었습니다. 지식을 더욱 확대하기 위해 일반적으로 문자열 일치 및 대체 요구 사항에 대한 정규식을 살펴 보는 것이 좋습니다.

누군가가 이미이 모든 문제를 해결했다는 것을 깨닫기 전에 처음으로 2 년 동안 독창적 인 프로그래밍 경력을 갖고 상상할 수있는 가장 복잡한 문자열 조작을했습니다. Mastering Regular Expressions 사본을 가져 왔습니다. 나는 그것을 강력히 추천한다. 마지막 디렉토리를 없애기

한 가지 방법은 다음과 같은 정규 표현식이다 :

tempDir = Regex.Match(tempDir, @".*(?=\\[^\\]+)\\?").Value; 

그것은 비밀 보일 수 있지만, 실제로는 관계없이 그 이름에 관계없이 경로에서 마지막 항목을 제거합니다 끝에 다른 \이 있는지 여부.

+0

Jay 고맙다. 그 책을 확인해야 겠어. 나는 정규 표현식을 살펴볼 의향이있다. – JimDel