2017-12-07 15 views
0

私はファイル名のリストをドロップダウンしています。ドロップダウンでファイル名を選択すると、次のようになります。ファイルの拡張子を取得するC#

string filename = ddl.SelectedItem.Text; 
string path = "F:\\WorkingCopy\\files\\" + filename +".docx"; 
DownloadFile(path,filename); 

ファイルフォルダファイルには、任意の拡張子が含まれる場合があります。私はハードコード化された ".docx"という文字列のパスですべて正常に動作します。しかし、私はddl.SelectedItem.Textだけでファイル名の拡張子を取得する必要があります。これを行う方法を教えていただけますか?私は 1を持っている

物事)ファイルが

string path = "F:\\WorkingCopy\\files\\" + filename 

に位置しています

string filename = ddl.SelectedItem.Text; 

2で拡張子のないファイル名)のパス私はこれらを使用してファイルの拡張子を取得しようとしています。誰にでもこれを提案できますか?あなたが行

try 
{ 
    var extensions = new List<string>(); 
    var files = Directory.GetFiles("F:\\WorkingCopy\\files\\", filename + ".*", System.IO.SearchOption.TopDirectoryOnly); 

    foreach (var tmpfile in files) 
     extensions.Add(Path.GetExtension(tmpfile)); 

} 
catch (Exception ex) 
{ 
      throw ex; 
} 

が続くとのことを達成することができます

+1

'filename.ext1'と' filename.ext2'の2つのファイルがある場合はどうなりますか? –

+0

私の場合はこのような状況はありません –

+0

私は一意のファイル名と拡張子を使用します。私はそのような状況を持っていません –

答えて

2

あなたはこのようDirectory.EnumerateFiles()を使用することができます。

string path = "F:\\WorkingCopy\\files\\"; 
string filename = ddl.SelectedItem.Text; 

string existingFile = Directory.EnumerateFiles(path, filename + ".*").FirstOrDefault(); 

if (!string.IsNullOrEmpty(existingFile)) 
    Console.WriteLine("Extension is: " + Path.GetExtension(existingFile)); 

filename.*のようなファイルのためのpathを検索Directory.EnumerateFilesPath.GetExtension()は、見つかったファイルの拡張子を返します。一般的に


、私はそれがIEnumerable<string>代わりstring[]を返すためEnumerateFiles()の代わりGetFilesを使用することを好みます。これは、一度に一致するすべてのファイルを検索するのではなく、必要に応じて一致するファイルのみを返すことを示唆しています。 (これはあなたの場合は重要ではなく、一般的な注釈です)。

+1

私はこれを試しました。しかし、私はこのエラーが発生しました 'F:\ WorkingCopy \ files \ filename'のパスの一部を見つけることができませんでした。しかし、パスは存在します –

+0

私は 'path'と' filename'が私の例で示したことを示しました。もちろん、 'F:\ WorkingCopy \ files'だけを' path'として使用し、末尾の 'filename'は使用しません。 –

+0

ありがとうございます。それは今働いた。あなたは私の問題を解決しました。 –

0

は、このお手伝いをしますか?

+0

これは私を助けません。拡張子が空になる –

+0

私の答えを編集しました –

0

あなたはDirectory.GetFilesメソッドを使用することができます。

string result = Directory.GetFiles(path, filename + ".*").FirstOrDefault(); 

がここhere

を参照してください "*"WildCardで、ファイル名がYourFileNameで始まるを検索します。

0

Directory.GetFiles()メソッドを使用します。このようなもの

string[] files = Directory.GetFiles("F:\\WorkingCopy\\files\\", filename+".*"); 

これは、ファイル名は同じですが拡張子が異なるファイル名の配列を取得します。 1つしかない場合は、常に最初のものを使用できます。

0

あなたは、単にドットによってそれらを分割することができ、例えば、このコードは、私は、このための拡張子がtxtのファイルであることを結果として提供します。このコード

 string folder = @"F:\\WorkingCopy\\files\\"; 
     var files = System.IO.Directory.GetFiles(folder, filename + ".*"); 

     if (files.Any()) 
     { 
      string ext = System.IO.Path.GetExtension(files.First()).Substring(1); 
     } 

を試してみてください。

+0

@RenéVogtOPはF:\\ WorkingCopyからファイル名を知りたい\\ files \\ "+ filename"何が間違っていますか?私は私の答えも編集します。 – Adrian

+0

それは私が尋ねたものではありません。親切に質問を正しくお読みください –

+0

@SamDaniel今すぐチェック – Adrian

関連する問題