C# 读取文件类型

news/2024/7/23 9:32:55 标签: 1024程序员节, c#, 文件类型读取

获取示例

代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp6filetype
{
    internal class Program
    {
        static void Main(string[] args)
        {

            string filePath = Path.GetFullPath("..//..");
            //Console.WriteLine(filePath);
            string fileFullPath = Path.Combine(filePath, "Program.cs");
            string typeName = GetFileTypeName(fileFullPath);
            Console.WriteLine(typeName);
            Console.ReadKey();
        }
        //pszPath指向包含路径和文件名的最大长度MAX_PATH 以 null 结尾的字符串的指针。 绝对路径和相对路径均有效。
        //dwFileAttributes 一个或多个 文件属性标志 的组合, (FILE_ATTRIBUTE_ Winnt.h) 中定义的值。 如果 uFlags 不包含 SHGFI_USEFILEATTRIBUTES 标志,则忽略此参数。
        //psfi指向 SHFILEINFO 结构的指针,用于接收文件信息。
        //cbFileInfo psfi 参数指向的 SHFILEINFO 结构的大小(以字节为单位)。
        //uFlags指定要检索的文件信息的标志。 此参数可以是以下值的组合。
        //https://learn.microsoft.com/zh-cn/windows/win32/api/shellapi/nf-shellapi-shgetfileinfoa?redirectedfrom=MSDN
        [DllImport("shell32.dll", CharSet = CharSet.Auto)]
        public static extern int SHGetFileInfo(string pszPath, uint dwFileAttributes, out SHFILEINFO psfi, uint cbFileInfo, uint uFlags);
        //https://learn.microsoft.com/zh-cn/windows/win32/api/shellapi/ns-shellapi-shfileinfoa
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        public struct SHFILEINFO
        {
            public IntPtr hIcon;//表示文件的图标的句柄。
            public int iIcon;//系统映像列表中的图标图像的索引。
            public uint dwAttributes;//一个值数组,指示文件对象的属性。
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
            public string szDisplayName;//一个字符串,其中包含文件在 Windows Shell 中显示的名称,或包含表示该文件的图标的文件的路径和文件名。
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
            public string szTypeName;//描述文件类型的字符串。
        }
        //检索描述文件类型的字符串。 字符串将复制到 psfi 中指定的结构的 szTypeName 成员。
        public const uint SHGFI_TYPENAME = 0x000000400;
        //未设置其他属性的文件。 此属性仅在单独使用时才有效。
        //https://learn.microsoft.com/zh-cn/windows/win32/fileio/file-attribute-constants
        public const uint FILE_ATTRIBUTE_NORMAL = 0x00000080;
        static string GetFileTypeName(string filePath)
        {
            SHFILEINFO shfi = new SHFILEINFO();
            int ret = SHGetFileInfo(filePath, FILE_ATTRIBUTE_NORMAL, out shfi, (uint)Marshal.SizeOf(shfi),
                SHGFI_TYPENAME);

            if (ret != 0)
                return shfi.szTypeName;
            else
                return string.Empty;
        }
    }
}

结果

参考文献

https://www.cnblogs.com/log9527blog/p/17723109.html


http://www.niftyadmin.cn/n/5125527.html

相关文章

JVM相关面试题(每日一练)

1. 什么是垃圾回收机制? 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。 jvm 中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭&a…

strace跟着-编译和解决sip的bus srror问题记录

1 问题: 我编译了一个开源sip代码,可以确定的是,在nuc980dk61yc、nuc97251y上都可以跑的正常程序, 但在该开发板(NUC97261Y)上运行,报错bus error; 此文记录了 解决该问题的过程 我手里有一个97…

[moeCTF 2023] REV

逆向这东西,不太好说。 base64 这是个pyc文件(python编译后的字节码文件),这东西可以直接用各种方法反编译。也可以不弄,必竟这应该签到级别的。用notepad打开,可以看到base64的编译和两个码表。显然猜是…

【Reticulate Micro】申请1000万美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于美国的【Reticulate Micro】近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为(RMIC) ,Reticulate…

网络编程 10.26

#include <head.h> #define SER_PORT 69 int main(int argc, const char *argv[]) {int cfdsocket(AF_INET,SOCK_DGRAM,0);//创建套接字文件用于发送给服务器if(cfd-1)//判断套接字文件是否创建成功{perror("socket error");return -1;}printf("*********…

GDPU 数据结构 天码行空7

一、【实验目的】 1、掌握数组的抽象数据类型 2、掌握动态数组的设计方法 3、理解动、静态数组的对比 4、掌握特殊矩阵的压缩存储及运算 5、掌握递归的原理及一般递归的程序设计方法 二、【实验内容】 1、设矩阵A、矩阵B为n阶对称矩阵&#xff0c;矩阵元素为整数类型&#x…

顺序表的查找(按位查找、按值查找)(数据结构与算法)

顺序表的基本操作&#xff1a;按位查找、按值查找 顺序表的按位查找 GetElem(L, i) :按位查找&#xff0c;获取表L中第 i 个位置元素的值 #define MaxSize 10 //定义最大长度 typedef struct{ElemType data[MaxSize]; //用静态的“数组”存放数据元…

系统架构师论文总结【持续更新】

系统架构师考试是对计算机从业人员&#xff0c;以考代评的重要考试&#xff0c;近几年一直在参加考试&#xff0c;屡战屡败&#xff0c;后又屡败屡战&#xff0c;记录总结论文相关的知识点&#xff0c;方便考前查看。 一、2010年论文 1&#xff09;论软件的静态演化和动态演化…