C# 读取文件类型

news2024/9/27 5:48:26

获取示例

代码

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.coloradmin.cn/o/1130761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用openlayers加载离线瓦片地图

一、需求背景 我们现在的项目就说使用openlayer geoServer自己发布的矢量地图,是和公安合作的项目,由于政府大都使用的是天地图,所以需要将geoServer的矢量地图改为天地图,搭配openlayers使用,openlayers还可以切换不…

spi的基本知识、软件spi、硬件spi(ADXL362为测试对象)

一、spi基础知识 1.1、spi基础知识一 SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉(Motorola)在1980前后提出的一种全双工同步串行通信接口,它用于MCU与各种外围设备以串行方式进行通…

纹波类型及纹波抑制措施

纹波主要有这几种类型:输入低频纹波、高频纹波、寄生参数引起的共模纹波噪声、功率器件开关过程中产生的超高频谐振噪声和闭环调节控制引起的纹波噪声。 1、低频纹波 低频纹波是与输出电路的滤波电容容量相关。电容的容量不可能无限制地增加,导致输出低…

视频号视频提取小程序,快速下载视频号视频

​视频号提取小程序可以帮助用户方便地从视频号视频平台获取到自己喜欢的视频号内容。通过这个小程序,你可以快速搜索并提取出视频号,并进行相关的操作。 据悉视频下载bot小程序目前已经更名为【提取下载小助手】 使用视频号提取小程序有以下几个步骤&…

postgresql group by之后对string字段进行拼接

数据如下 想要的效果 sql 如下 SELECT company_id, string_agg(employee, , ORDER BY employee) FROM mytable GROUP BY company_id;PostgreSQL STRING_AGG()函数是一个聚合函数,用于连接字符串列表并在它们之间放置分隔符。该函数不会在字符串的末尾添加分隔符。…

C语言猜数字小游戏(也包含python实现的用法)

猜数字小游戏 前言1. C语言中随机数生成1.1 rand1.2 srand1.3 time1.4 设置随机数的范围 2. 猜数字游戏实现C语言实现猜数字小游戏python方法实现猜数字小游戏 前言 本文基于VS2022、pycharm和前面的知识,写一个凭借分支与循环的小游戏,比如&#xff1a…

C# 使用using报错CS1674解决办法

Severity Code Description Project File Line Suppression State Error CS1674 ‘MutipleThreadResetEvent’: type used in a using statement must be implicitly convertible to ‘System.IDisposable’. 第一种解决方法:工具 -.NuGet下载EntityFramework是否能…

C++设计模式_12_Singleton 单件模式

在之前的博文C57个入门知识点_44:单例的实现与理解中,已经详细介绍了单例模式,并且根据其中内容,单例模式已经可以在日常编码中被使用,本文将会再做梳理。 Singleton 单件模式可以说是最简单的设计模式,但由…

力扣第1005题 K 次取反后最大化的数组和 c++ 贪心 双思维

题目 1005. K 次取反后最大化的数组和 简单 相关标签 贪心 数组 排序 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以…

【Javascript】通过浏览器书签构建与执行自动刷新脚本

0x00 前言 日常工作中,经常遇到需要时不时点一下刷新这样的事情(怪前端想不到写一个自动刷新) 但是…… 没有自动刷新按钮,在这页面手动点刷新还是太浪费时间了。 有时候懒得等了去做别的事情,过一小时回来刷新一下&a…

k8s之Flannel网络插件安装提示forbidden无权限

一、问题描述 在安装k8s的网络插件时,提示如下信息,各种forbidden无权限 [rootzzyk8s01 scripts]# kubectl apply -f kube-flannel.yml Error from server (Forbidden): error when retrieving current configuration of: Resource: "policy/v1b…

Vue中使用Web Serial API连接串口,实现通信交互

Vue中使用Web Serial API连接串口,实现通信交互 Web Serial API,web端通过串口与硬件通信; 该API是JS本身 navigator 对象上就独有的,所以与Vue和React框架开发都没有太大的关系, 串口是一个双向通信接口,允许字节发送…

ES6 模块化编程 详解

目录 一、基本介绍 二、基本原理示意图 三、传统CommonJS实现模块化编程 1.介绍 : 2.实例 : 四、ES6新特性实现模块化编程 1.介绍 : 2.实例 : 一、基本介绍 (1) ES6新特性——模块化编程,用于解决传统非模块化开发中出现的"命名冲突", "文件…

LDAP和Kerberos疑难问题诊断方法

不同的工具和方法总能给问题的解决带来希望。本文使用SSSD工具诊断Kerberos和LDAP登录问题诊断。后端(通常也称为数据提供程序)是管理和创建缓存的 SSSD 子进程。此过程与LDAP服务器通信,执行不同的查找查询并将结果存储在缓存中。它还针对 L…

PY32F002A系列单片机:高性价比、低功耗,满足多样化应用需求

PY32F002A系列微控制器是一款高性能、低功耗的MCU,它采用32位ARM Cortex-M0内核,最高工作频率达到24MHz,提供了强大的计算能力。此外,PY32F002A拥有最大20Kbytes的flash存储器和3Kbytes的SRAM,为简单的数据处理提供了充…

一文速通Nginx网关与gateway网关区分

目录 API网关介绍 gateway基本介绍 Nginx基本介绍 Nginx与API gateway网关 API网关介绍 网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系…

创建 Edge 浏览器扩展教程(上)

创建 Edge 浏览器扩展教程(上) 介绍开始之前后续步骤开始之前1:创建清单 .json 文件2 :添加图标3:打开默认弹出对话框 介绍 在如今日益数字化的时代,浏览器插件在提升用户体验、增加功能以及改善工作流程方…

Spring Authorization Server 1.1 扩展 OAuth2 密码模式与 Spring Cloud Gateway 整合实战

目录 前言无图无真相创建数据库授权服务器maven 依赖application.yml授权服务器配置AuthorizationServierConfigDefaultSecutiryConfig 密码模式扩展PasswordAuthenticationTokenPasswordAuthenticationConverterPasswordAuthenticationProvider JWT 自定义字段自定义认证响应认…

【AI视野·今日Robot 机器人论文速览 第五十八期】Thu, 19 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Thu, 19 Oct 2023 Totally 25 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers InViG: Benchmarking Interactive Visual Grounding with 500K Human-Robot Interactions Authors Hanbo Zhang, Jie Xu, Yuch…

『heqingchun-Qt的艺术-优雅界面设计开发』

Qt的艺术-优雅界面设计开发 效果图 一、新建Qt窗口工程 二、准备资源文件 1.图标资源 链接: 图标资源 2.Qss资源 链接: Qss资源 三、设计开发 项目源码链接: CSDN资源