파일 이름이 포함 된 경로에서 파일 이름없이 전체 경로 가져 오기


198

내장이 무엇인가 System.IO.Path가 나에게 단지 파일 경로를 제공?

예를 들어 string

@ "c : \ webserver \ public \ myCompany \ configs \ promo.xml",

나에게 줄 BCL 방법이 있습니까?

"c : \ webserver \ public \ myCompany \ configs \"?



FWIW : Path의 "paths"처리에 대해 "배상"했으며 UNC (UNC 경로에서 GetDirectoryName을 사용하려고 시도) 및 규칙 (예 : 후행 /)과 함께 더 나은 기대치 및 균일 성으로 자체 메서드를 사용합니다.
user2864740

파일이나 디렉토리가 존재하지 않으면 promo.xml같은 이름으로 파일이나 디렉토리를 지정 할지 알 수 없습니다 . 그렇기 때문에 아마도 Path.GetDirectoryName()간단하게 구현되어 마지막 세그먼트를 자르거나 후행 슬래시가 있으면 제거합니다.
Abel

답변:


241

Path.GetDirectoryName()...하지만 경로에 전달 된 경로에 파일 이름이 포함되어 있음을 알아야합니다. 파일 이름이든 디렉토리 이름이든 실제로 경로에서 최종 비트를 제거합니다 (실제로 어떤 것을 알지 못함).

테스트 File.Exists()및 / 또는 Directory.Exists()경로를 먼저 확인하여 전화해야하는지 확인할 수 있습니다.Path.GetDirectoryName


2
전화 할 필요가 없습니다 File.Exists(). 실제로 디렉토리 이름을 찾는 이유가 디렉토리 이름이없는 경우 디렉토리 이름을 작성하는 것이 오히려 비생산적입니다.
Jon Hanna

3
그의 예제는 명시 적으로 파일 이름을 가진 경로를 기록합니다. 이것이 테스트하는 경로의 패턴이고 해당 경로가 기존 파일을 나타내는 경우 File.Exists ()를 확인하면 도움이 될 것입니다. 물론 상황이 다를 수 있기 때문에 파일 및 / 또는 디렉토리에서 Exists 메소드를 사용할 수 있다고 제안했습니다. 분명히 그의 상황에 맞게.
Andrew Barber

예, 파일 이름이있는 경로입니다. 파일 이름이 먼저 나올 때 파일이 존재한다는 것을 나타내는 것은 없습니다.
Jon Hanna

4
내가 말했듯이; 옵션이며 경로에 대해 알려진 내용에 따라 도움이 될 수 있습니다. 또는 전혀 필요하지 않을 수도 있습니다. 그러나 동일한 경로에서 File.Exists () 및 Directory.Exists ()를 테스트하면 존재하는 경로가 파일 또는 디렉토리인지 빠르고 쉽게 알 수 있습니다.
Andrew Barber

5
질문에 대한 중복성 및 "명백한"대우에 대한 빠른 참조 System.IO로이 기능을 포함시켜야 합니다.
cregox

70
Console.WriteLine(Path.GetDirectoryName(@"C:\hello\my\dear\world.hm")); 

2
이게 최선이다. 기억 using System.IO;경로 방법을 활용
구문 오류

여기에는 후행 슬래시 (단 하나를 추가하는 것이 쉽지 않음)가 포함되어 있지 않습니다.
Mingwei Samuel

51

Path.GetDirectoryName()디렉토리 이름을 반환하므로 원하는대로 (역 후진 문자 사용) 호출 할 수 Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar있습니다.


12
    string fileAndPath = @"c:\webserver\public\myCompany\configs\promo.xml";

    string currentDirectory = Path.GetDirectoryName(fileAndPath);

    string fullPathOnly = Path.GetFullPath(currentDirectory);

currentDirectory : c : \ webserver \ public \ myCompany \ configs

fullPathOnly : c : \ webserver \ public \ myCompany \ configs


6
이 답변을 개선하기 위해 위의 코드가 질문에 어떻게 대답하는지에 대한 정보를 제공하십시오.
Eric Hauenstein

1
Path.GetFullPath는 파일 이름없이 전체 경로를 반환합니다.
Kobie Williams

출력을 보여주는 것이 도움이 될 것입니다. 마지막 두 줄의 차이점이 무엇인지 모르겠습니다.
gakera

출력 :-> c : \ webserver \ public \ myCompany \ configs
Kobie Williams

5

그림과 같이 'GetParent ()'를 사용하면 잘 작동합니다. 필요에 따라 오류 검사를 추가하십시오.

var fn = openFileDialogSapTable.FileName;
var currentPath = Path.GetFullPath( fn );
currentPath = Directory.GetParent(currentPath).FullName;

4

나는 이것을 사용했고 잘 작동한다 :

string[] filePaths = Directory.GetFiles(Path.GetDirectoryName(dialog.FileName));

foreach (string file in filePaths)
{   
    if (comboBox1.SelectedItem.ToString() == "")
    {
        if (file.Contains("c"))
        {
            comboBox2.Items.Add(Path.GetFileName(file));
        }
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.