2012-02-24 13 views
23

Jak mogę uzyskać pełną nazwę pliku?Jak znaleźć plik po jego częściowej nazwie?

Na przykład:

Mam plik o nazwie 171_s.jpg, który jest przechowywany na twardym dysku.

Potrzebuję znaleźć plik po jego częściowej nazwie, tj. 171_s i uzyskać pełną nazwę.

Jak mogę to wdrożyć?

Odpowiedz

45

Oto przykład przy użyciu GetFiles():

static void Main(string[] args) 
{ 
    string partialName = "171_s"; 
    DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(@"c:\"); 
    FileInfo[] filesInDir = hdDirectoryInWhichToSearch.GetFiles("*" + partialName + "*.*"); 

    foreach (FileInfo foundFile in filesInDir) 
    { 
     string fullName = foundFile.FullName; 
     Console.WriteLine(fullName); 
    }  
} 
+0

Działa to doskonale dla mnie, ale musiałem przekonwertować FileInfo a Rray do tablicy ciągów i stwierdził, że następujące działa lepiej: string [] filesInDir = Directory.GetFiles (@ "c: \", "*" + partialName + "*. *"); – hvaughan3

+1

'EnumerateFiles' jest preferowaną metodą w dzisiejszych czasach – MikeT

+0

@ hvaughan3 FileInfo ma właściwość Name i fullname, która da ci to plus wiele innych opcji, a także będziesz lepiej wykorzystywać informacje niż konwersję na ciągi znaków – MikeT

7

Można użyć System.IO.Directory.GetFiles()

http://msdn.microsoft.com/en-us/library/ms143316.aspx

public static string[] GetFiles(
    string path, 
    string searchPattern, 
    SearchOption searchOption 
) 

ścieżka Typ: System.String katalogu wyszukiwania.

searchPattern Typ: System.String ciąg wyszukiwania pasujące przed nazwami plików w ścieżce. Parametr nie może kończyć się dwoma kropkami ("..") ani zawierać dwóch kropek (".."), po których następuje DirectorySeparatorChar lub AltDirectorySeparatorChar, ani nie może zawierać żadnego ze znaków w InvalidPathChars.

searchOption Typ: System.IO.SearchOption Jedną z wartości SearchOption która określa, czy operacja wyszukiwania powinny obejmować wszystkie podkatalogi lub tylko bieżącego katalog.

2

Można to zrobić tak:

.... 

List<string> _filesNames; 

foreach(var file in _directory) 
{ 
    string name = GetFileName(file); 
    if(name.IndexOf(_partialFileName) > 0) 
    { 
     _fileNames.Add(name); 
    } 
} 
.... 
6

Odpowiedź jest już pisał, jednak dla łatwiejszego zrozumienia Oto kod

string folderPath = @"C:/Temp/"; 
DirectoryInfo dir= new DirectoryInfo(folderPath); 
FileInfo[] files = dir.GetFiles("171_s*", SearchOption.TopDirectoryOnly); 
foreach (var item in files) 
{ 
    // do something here 
} 
Powiązane problemy