C# 如何获取文件或文件夹的类型?

C# 如何获取文件或文件夹的类型?,c#,asp.net,C#,Asp.net,我正在列表框中显示一些目录及其所有内容和子目录。现在我想在另一个列表框中获取每个项目的类型、大小和修改时间。我成功地显示了大小和修改时间,但如何显示类型,例如,它是文件夹/文本文件/Pdf文件还是图像?这是在Windows资源管理器详细视图中,我们可以在其中查看文件的类型、大小和修改时间。我该怎么做 以下是我的尺寸代码和上次修改时间: private void ShowFilesIn(string dir) { DirectoryInfo dirInfo = new DirectoryI

我正在列表框中显示一些目录及其所有内容和子目录。现在我想在另一个列表框中获取每个项目的类型、大小和修改时间。我成功地显示了大小和修改时间,但如何显示类型,例如,它是文件夹/文本文件/Pdf文件还是图像?这是在Windows资源管理器详细视图中,我们可以在其中查看文件的类型、大小和修改时间。我该怎么做

以下是我的尺寸代码和上次修改时间:

private void ShowFilesIn(string dir)
{
    DirectoryInfo dirInfo = new DirectoryInfo(dir);

    lstFiles.Items.Clear();
    list_size.Items.Clear();
    list_modified.Items.Clear();
    list_type.Items.Clear();
    string downloadlink;        

    foreach (FileInfo fileItem in dirInfo.GetFiles())
    {
        downloadlink = fileItem.Directory + "/" + fileItem.Name ;
        ListItem li = new ListItem();
        li.Text = fileItem.Name;
        li.Value = downloadlink;
        lstFiles.Items.Add(li);
        list_size.Items.Add(fileItem.Length.ToString());
        list_type.Items.Add(Path.GetExtension(fileItem.Name));
        list_modified.Items.Add(fileItem.LastWriteTime.ToString());
     }
}

GetExtension()方法正在显示扩展名,但我需要Windows资源管理器中显示的文件类型,例如:文件夹、JPEG图像、文本文件等。

您可以使用

这就是如何在c#中获取文件类型信息或文件夹的方法


您可以使用

这就是如何在c#中获取文件类型信息或文件夹的方法


您可以使用从其路径获取每个文件的名称。

您可以使用从其路径获取每个文件的名称。

SHFILEINFO的名称空间是什么?这是一个p/Invoke调用,因此希望您的代码完全绑定到Windows。@AlinaAnjum,创建一个新文件,并在该文件中放置struct SHFILEINFO、enum FileInfoFlags和类Win32。现在,您可以从代码中的任何位置调用此Win32.SHGetFileInfo(..)。SHFILEINFO的命名空间是什么?这是一个P/Invoke调用,因此希望您的代码完全绑定到Windows。@AlinaAnjum,创建一个新文件,并将struct SHFILEINFO、enum FileInfoFlags和类Win32放置在该文件中。现在,您可以从代码中的任何位置调用此Win32.SHGetFileInfo(..)。在文件夹类型下是什么意思?
在文件夹类型下是什么意思?
你能详细说明语法吗?我如何使用此方法?这适用于.net 4.5,我正在使用2.0:(您能详细说明我如何使用此方法的语法吗?这适用于.net 4.5,我正在使用2.0:(
string filePath = .... // your File Path
FileAttributes attr = File.GetAttributes(filePath);

//detect whether its a directory or file
if ((attr & FileAttributes.Directory) != FileAttributes.Directory)
{
   SHFILEINFO shinfo = new SHFILEINFO();
   IntPtr intptr = Win32.SHGetFileInfo(fullpath, 0, ref shinfo,    (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_TYPENAME);
   var typeName = Convert.ToString(shinfo.szTypeName.Trim());
}
else 
{
  // it is Folder
}


struct SHFILEINFO
{
    public IntPtr hIcon;
    public int iIcon;
    public int dwAttributes;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
    public string szDisplayName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
    public string szTypeName;
}

 [Flags]
 enum FileInfoFlags : int
 {
     SHGFI_ICON = 0x000000100,     // get icon
     SHGFI_DISPLAYNAME = 0x000000200,     // get display name
     SHGFI_TYPENAME = 0x000000400,     // get type name
     SHGFI_ATTRIBUTES = 0x000000800,     // get attributes
     SHGFI_ICONLOCATION = 0x000001000,     // get icon location
     SHGFI_EXETYPE = 0x000002000,     // return exe type
     SHGFI_SYSICONINDEX = 0x000004000,     // get system icon index
     SHGFI_LINKOVERLAY = 0x000008000,     // put a link overlay on icon
     SHGFI_SELECTED = 0x000010000,     // show icon in selected state
     SHGFI_ATTR_SPECIFIED = 0x000020000,     // get only specified attribtes
     SHGFI_LARGEICON = 0x000000000,     // get large icon
     SHGFI_SMALLICON = 0x000000001,     // get small icon
     SHGFI_OPENICON = 0x000000002,     // get open icon
     SHGFI_SHELLICONSIZE = 0x000000004,     // get shell size icon
     SHGFI_PIDL = 0x000000008,     // pszPath is a pidl
     SHGFI_USEFILEATTRIBUTES = 0x000000010,     // use passed dwFileAttribute
     SHGFI_ADDOVERLAYS = 0x000000020,     // apply the appropriate overlays
     SHGFI_OVERLAYINDEX = 0x000000040,     // Get the index of the overlay in 
     // the upper 8 bits of the iIcon
 }

 public class Win32
 {
    public const uint SHGFI_DISPLAYNAME = 0x00000200;
    public const uint SHGFI_TYPENAME = 0x400;
    public const uint SHGFI_ICON = 0x100;
    public const uint SHGFI_LARGEICON = 0x0; // 'Large icon
    public const uint SHGFI_SMALLICON = 0x1; // 'Small icon

   [DllImport("shell32.dll")]
    public static extern IntPtr SHGetFileInfo(string pszPath, uint
        dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
}