如何find文件的扩展名?

在我的Web应用程序(asp.net,C#)我上传video文件的页面,但我只想上传FLVvideo。 我怎样才能限制我上传其他扩展video?

Path.GetExtension

string myFilePath = @"C:\MyFile.txt"; string ext = Path.GetExtension(myFilePath); // ext would be ".txt" 

在服务器上,您可以检查MIMEtypes,查找FLV MIMEtypes在这里或谷歌。

你应该检查MIMEtypes是

 video/x-flv 

如果你在C#中使用FileUpload,你可以这样做

 FileUpload.PostedFile.ContentType == "video/x-flv" 

我不确定这是否是你想要的,但是:

 Directory.GetFiles(@"c:\mydir", "*.flv"); 

要么:

 Path.GetExtension(@"c:\test.flv") 

您可以简单地阅读文件的stream

 using (var target = new MemoryStream()) { postedFile.InputStream.CopyTo(target); var array = target.ToArray(); 

首先5/6索引会告诉你文件types。 在FLV的情况下

private static readonly byte [] FLV = {70,76,86,1,5};

 Just do - var isAllowed = array.Take(5).SequenceEqual(FLV); 

如果是,那么它的FLV。

要么

阅读文件的内容

 var contentArray = target.GetBuffer(); var content = Encoding.ASCII.GetString(contentArray); 

前两个/三个字母会告诉你文件types。 在FLV的情况下

“FLV | \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 ……”

 Just do - content.StartsWith("FLV") 

您将无法限制用户在客户端上传的文件types[*]。 你只能在服务器端做到这一点。 如果用户上传不正确的文件,则只有在file upload后才能识别上传。 没有可靠和安全的方法来阻止用户上传任何他们想要的文件格式。

[*]是的,你可以做各种聪明的东西来检测文件扩展名,然后再开始上传,但不要依赖它。 有人会绕过它,迟早会上传他们喜欢的任何东西。

您可以检查.flv签名。 你可以在这里下载规格:

http://www.adobe.com/devnet/flv/

请参阅“FLV标题”一章。

另外,如果你有一个FileInfo fi ,你可以简单地做:

 string ext = fi.Extension; 

它将保存文件的扩展名(注意:它将包含. ,所以上面的结果可能是: .jpg .txt ,等等….

此解决scheme还有助于多个扩展名的情况下,如“Avishay.student.DB”

  FileInfo FileInf = new FileInfo(filePath); string strExtention = FileInf.Name.Replace(System.IO.Path.GetFileNameWithoutExtension(FileInf.Name), ""); 

以。。结束()

在DotNetPerls上find了一个我更喜欢的替代解决scheme,因为它不需要你指定一个path。 这是一个例子,我用一个自定义的方法来帮助我填充一个数组

  // This custom method takes a path // and adds all files and folder names to the 'files' array string[] files = Utilities.FileList("C:\", ""); // Then for each array item... foreach (string f in files) { // Here is the important line I used to ommit .DLL files: if (!f.EndsWith(".dll", StringComparison.Ordinal)) // then populated a listBox with the array contents myListBox.Items.Add(f); }