2013-10-12 3 views
0

У меня есть путь без расширения Дано:Получить расширение от неполного файла

C:\myFilename 

Как я знаю, что такое расширение этого файла? Есть ли более простой (и менее интенсивный) способ обойти весь цикл и посмотреть, какой из них соответствует строке?

+2

Путь не содержит расширение, поэтому, если оно предназначено для обратитесь к существующему файлу, вы * имеете *, чтобы получить расширение, выполнив поиск соответствующего файла. Вы можете сделать это, зациклив каталог или, например, сначала прочитав каталог в словаре . – dtb

+0

выглядит так, как будто я должен это делать. Хотелось ли этого избежать, так как я думаю, что ресурсы процессора, необходимые для прокрутки тысяч файлов таким образом, могут быть довольно много? –

ответ

0

В одном и том же каталоге может быть много файлов с одинаковыми именами файлов с разными расширениями:

//Get all the files starting from myFilename 
string[] files = Directory.GetFiles(@"c:\", "myFilename.*"); 

//Use Path.GetExtenstion() method to extract extension part 
foreach(string file in files) 
{ 
    extension = Path.GetExtension(file); 
    Console.WriteLine("Extension of ('{0}') is '{1}'", file, extension); 
} 

Path Class имеет несколько очень полезных методов.

Path.GetDirectoryName() 
Path.GetFileName() 
Path.GetFileNameWithoutExtension() 
Path.GetFullPath() 
... 
0
System.IO.Directory.GetFiles("C:\\","myFilename*") 

будет возвращать массив всех имен файлов, соответствующих шаблону, без необходимости его петли.

+0

К сожалению, это не работает для файлов в UNC-пути ... –

0

Это зависит, в идеале ваша программа будет ожидать ограниченного списка расширений. С помощью этого расширения вы можете напрямую обращаться к файлу. Но если вы не знаете, тогда вы можете получить только те файлы, которые соответствуют регулярному выражению filename. *, Где * будет любая последовательность символов после.

Вот пример кода, чтобы сделать это

String[] FileList = GetFiles("c:\MyFileName*",SearchOption.TopDirectoryOnly); 

Вы также найдете еще 2 варианта этой функции, которая даст вам рекурсивный поиск и другие варианты

Вы можете прочитать эту http://msdn.microsoft.com/en-us/library/ms143316.aspx

1
  1. Определите неполный путь в Directory.GetFiles() «s searchPattern параметра с * в конце
  2. перебрать все совпавшие пути к файлам и получить их имя и расширение файла с Path.GetFileName() и Path.GetExtension()

    string searchPattern = "myFilename*"; 
    string[] filePaths = Directory.GetFiles (@"C:\", searchPattern); 
    
    foreach (string filePath in filePaths) { 
        string fileName = Path.GetFileName(filePath); 
        string ext = Path.GetExtension(filePath); 
    } 
    
Смежные вопросы