获取C#文件扩展名

3

我有一个下拉菜单,列出了文件名列表。当在下拉菜单中选择文件名时,我执行以下操作:

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

在文件夹中,文件的扩展名可以是任意的。由于我在字符串路径中硬编码了“.docx”,所以一切都很正常。但是我仅使用ddl.SelectedItem.Text获取文件名的扩展名。你能告诉我如何做到这一点吗?
我有以下内容: 1.) 不带拓展名的文件名
string filename = ddl.SelectedItem.Text;

2.) 文件所在的路径

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

我正在尝试使用这些代码获取文件扩展名。有人可以提供建议吗?

1
如果有两个文件filename.ext1filename.ext2,会怎样呢? - René Vogt
在我的情况下不会出现这种情况。 - Sam Daniel
我会有唯一的文件名和扩展名。我不会有这样的情况。 - Sam Daniel
5个回答

6
您可以这样使用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));

Directory.EnumerateFiles会在path中查找文件名类似于filename.*的文件。而Path.GetExtension()则返回所找到的文件的扩展名。


一般情况下,我更喜欢使用EnumerateFiles()而不是GetFiles,因为它返回一个IEnumerable<string>而不是string[]。这意味着它只在需要时返回匹配的文件,而不是一次搜索所有匹配的文件(在您的情况下并不重要,只是一般说明)。


1
我尝试了这个。但是我收到了这个错误:无法找到路径的一部分“F:\WorkingCopy\files\filename”。但是该路径存在。 - Sam Daniel
@RenéVogt,你应该考虑使用Joining paths来避免操作系统不兼容性。https://msdn.microsoft.com/zh-cn/library/fyy7a5kt(v=vs.110).aspx#Anchor_3 - Vishal Sharma
@vishalsharma,您到底是什么意思?Path.Combine(filename, ".*")会给我一个f:\working...\filename\.*,这显然不是我想要的。在我的代码中,我需要在哪里连接路径?路径已经在path中完整了。 - René Vogt
1
@vishalsharma 好的,但那只是一个例子...对于这个问题,OP已经有一个包含正确路径的变量path。但你说得对,一般情况下应该使用Path中的方法来正确处理文件和目录名。 - René Vogt
如果在指定目录中存在多个具有不同扩展名的文件,会发生什么? - Vicky S
显示剩余2条评论

0
你可以使用 Directory.GetFiles 方法:
string result =  Directory.GetFiles(path, filename + ".*").FirstOrDefault();

请看这里

这里的" * "通配符,将搜索以YourFileName开头的文件名。


0

你可以通过跟随的行来实现这一点

 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;
}

这个对你有帮助吗?


这对我没有帮助。扩展名将为空。 - Sam Daniel

0

使用 Directory.GetFiles() 方法。像这样:

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

这将为您获取具有相同文件名但不同扩展名的文件名数组。如果只有一个,则始终可以使用第一个。


0
你可以通过点号简单地将它们分开,例如,尝试这段代码。
        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);
        }

这段代码给我返回的结果是这个文件的扩展名是txt。


@RenéVogt OP 想知道从 "F:\WorkingCopy\files\" + filename " 中获取的文件名是什么,有什么问题吗?我已经编辑了我的答案。 - Anirudha Gupta
@SamDaniel 现在检查一下。 - Anirudha Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接