C# 获取文件、文件夹和驱动器的信息详解与示例

news2024/9/25 17:20:45

文章目录

    • 二、获取文件夹信息
    • 三、获取驱动器信息
    • 四、示例:文件、文件夹和驱动器信息工具
    • 五、异常处理
    • 六、总结

在这里插入图片描述


在C#中,文件、文件夹和驱动器是文件系统操作的基本元素。了解如何获取这些元素的信息对于开发文件处理和管理工具至关重要。本文将详细介绍如何在C#中获取有关文件、文件夹和驱动器的信息,并提供相应的示例。

一、获取文件信息
FileInfo类提供了用于获取文件属性的方法。以下是一些常用的属性和方法:

  • Name:获取文件名。
  • FullName:获取文件的完整路径。
  • Length:获取文件的大小(以字节为单位)。
  • CreationTime:获取文件的创建时间。
  • LastAccessTime:获取文件最后访问时间。
  • LastWriteTime:获取文件最后写入时间。

示例:获取文件信息

FileInfo fileInfo = new FileInfo(@"C:\Your\File\Path.txt");

Console.WriteLine("File Name: " + fileInfo.Name);
Console.WriteLine("File Full Path: " + fileInfo.FullName);
Console.WriteLine("File Size: " + fileInfo.Length + " bytes");
Console.WriteLine("Creation Time: " + fileInfo.CreationTime);
Console.WriteLine("Last Access Time: " + fileInfo.LastAccessTime);
Console.WriteLine("Last Write Time: " + fileInfo.LastWriteTime);

二、获取文件夹信息

DirectoryInfo类提供了用于获取目录属性的方法。以下是一些常用的属性和方法:

  • Name:获取目录名。
  • FullName:获取目录的完整路径。
  • CreationTime:获取目录的创建时间。
  • LastAccessTime:获取目录最后访问时间。
  • LastWriteTime:获取目录最后写入时间。
  • GetFiles():获取目录中的文件列表。
  • GetDirectories():获取目录中的子目录列表。

示例:获取文件夹信息

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Your\Directory\Path");

Console.WriteLine("Directory Name: " + directoryInfo.Name);
Console.WriteLine("Directory Full Path: " + directoryInfo.FullName);
Console.WriteLine("Creation Time: " + directoryInfo.CreationTime);
Console.WriteLine("Last Access Time: " + directoryInfo.LastAccessTime);
Console.WriteLine("Last Write Time: " + directoryInfo.LastWriteTime);

// 获取目录中的文件
FileInfo[] files = directoryInfo.GetFiles();
Console.WriteLine("Files:");
foreach (FileInfo file in files)
{
    Console.WriteLine(" - " + file.Name);
}

// 获取目录中的子目录
DirectoryInfo[] subDirectories = directoryInfo.GetDirectories();
Console.WriteLine("Subdirectories:");
foreach (DirectoryInfo dir in subDirectories)
{
    Console.WriteLine(" - " + dir.Name);
}

三、获取驱动器信息

DriveInfo类提供了用于获取驱动器属性的方法。以下是一些常用的属性:

  • Name:获取驱动器的名称。
  • TotalSize:获取驱动器的总大小(以字节为单位)。
  • AvailableFreeSpace:获取驱动器上可用的空闲空间(以字节为单位)。
  • DriveType:获取驱动器的类型(如固定驱动器、可移动驱动器等)。

示例:获取驱动器信息

DriveInfo driveInfo = new DriveInfo(@"C:\");

Console.WriteLine("Drive Name: " + driveInfo.Name);
Console.WriteLine("Total Size: " + driveInfo.TotalSize + " bytes");
Console.WriteLine("Available Free Space: " + driveInfo.AvailableFreeSpace + " bytes");
Console.WriteLine("Drive Type: " + driveInfo.DriveType);

四、示例:文件、文件夹和驱动器信息工具

以下是一个完整的示例,该示例将上述方法组合起来,创建一个简单的工具来显示文件、文件夹和驱动器的信息:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        Console.WriteLine("Enter the path of a file, directory, or drive:");
        string path = Console.ReadLine();

        if (File.Exists(path))
        {
            DisplayFileInfo(new FileInfo(path));
        }
        else if (Directory.Exists(path))
        {
            DisplayDirectoryInfo(new DirectoryInfo(path));
        }
        else if (DriveInfo.GetDrives().Any(d => d.Name == path))
        {
            DisplayDriveInfo(new DriveInfo(path));
        }
        else
         {
            Console.WriteLine("The specified path does not exist.");
        }
    }

    static void DisplayFileInfo(FileInfo fileInfo)
    {
        Console.WriteLine("File Information:");
        Console.WriteLine(" - Name: " + fileInfo.Name);
        Console.WriteLine(" - Full Path: " + fileInfo.FullName);
        Console.WriteLine(" - Size: " + fileInfo.Length + " bytes");
        Console.WriteLine(" - Creation Time: " + fileInfo.CreationTime);
        Console.WriteLine(" - Last Access Time: " + fileInfo.LastAccessTime);
        Console.WriteLine(" - Last Write Time: " + fileInfo.LastWriteTime);
    }

    static void DisplayDirectoryInfo(DirectoryInfo directoryInfo)
    {
        Console.WriteLine("Directory Information:");
        Console.WriteLine(" - Name: " + directoryInfo.Name);
        Console.WriteLine(" - Full Path: " + directoryInfo.FullName);
        Console.WriteLine(" - Creation Time: " + directoryInfo.CreationTime);
        Console.WriteLine(" - Last Access Time: " + directoryInfo.LastAccessTime);
        Console.WriteLine(" - Last Write Time: " + directoryInfo.LastWriteTime);

        Console.WriteLine(" - Files:");
        FileInfo[] files = directoryInfo.GetFiles();
        foreach (FileInfo file in files)
        {
            Console.WriteLine("   - " + file.Name);
        }

        Console.WriteLine(" - Subdirectories:");
        DirectoryInfo[] subDirectories = directoryInfo.GetDirectories();
        foreach (DirectoryInfo dir in subDirectories)
        {
            Console.WriteLine("   - " + dir.Name);
        }
    }

    static void DisplayDriveInfo(DriveInfo driveInfo)
    {
        Console.WriteLine("Drive Information:");
        Console.WriteLine(" - Name: " + driveInfo.Name);
        Console.WriteLine(" - Total Size: " + driveInfo.TotalSize + " bytes");
        Console.WriteLine(" - Available Free Space: " + driveInfo.AvailableFreeSpace + " bytes");
        Console.WriteLine(" - Drive Type: " + driveInfo.DriveType);
    }
}

在这个示例中,程序会提示用户输入一个路径,然后根据路径的类型(文件、目录或驱动器)显示相应的信息。

五、异常处理

在处理文件和目录时,可能会遇到各种异常,如权限不足、路径不存在等。因此,应该使用try-catch块来处理这些潜在的错误:

try
{
    // 调用 DisplayFileInfo, DisplayDirectoryInfo 或 DisplayDriveInfo 方法
}
catch (UnauthorizedAccessException)
{
    Console.WriteLine("Access denied to the specified path.");
}
catch (FileNotFoundException)
{
    Console.WriteLine("The file was not found.");
}
catch (DirectoryNotFoundException)
{
    Console.WriteLine("The directory was not found.");
}
catch (DriveNotFoundException)
{
    Console.WriteLine("The drive was not found.");
}
catch (Exception e)
{
    Console.WriteLine($"An unexpected error occurred: {e.Message}");
}

六、总结

本文介绍了如何在C#中获取有关文件、文件夹和驱动器的信息。通过使用System.IO命名空间中的FileInfo、DirectoryInfo和DriveInfo类,我们可以轻松地获取各种属性,如路径、大小、创建时间等。通过一个简单的示例程序,我们展示了如何将这些信息输出到控制台。最后,我们还讨论了异常处理的重要性,以确保程序的健壮性。在编写涉及文件系统操作的代码时,这些技巧和概念将非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077687.html

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

相关文章

JAVA基础:文件字符流

目录 前言 文件字符流的创建 文件字符流的使用 前言 上一篇我们知道了如果在使用输入流读取数据时,数据中含有中文就会出现乱码的情况,这时就要使用字节字符转换流这个过程流来处理一下,针对这种情况我们可以直接使用文件字符流来读取数据…

计算机毕业设计hadoop++hive微博舆情预测 微博舆情分析 微博推荐系统 微博预警系统 微博数据分析可视化大屏 微博情感分析 微博爬虫 知识图谱

1.selenium爬取微博热搜、文章、评论数据存入mysql数据库,对评论lstm情感分析模型建模分析; 2.使用mapreduce对mysql中微博数据清洗,转为.csv文件上传hdfs文件系统; 3.使用hive建库建表,导入.csv数据集; 4.一半指标hive_sql进行离…

3_1_PID控制原理

自从计算机进入控制领域以来,用数字计算机代替模拟计算机调节器组成计算机控制系统,不仅可以用软件实现PID控制算法,而且可以利用计算机的逻辑功能,使PID控制更加灵活。数字PID控制在生产过程中是一种最普遍采用的控制方法&#x…

AI-Talk开发板外设测试

一、说明 需要先测试各外设的功能正常,再开发正式应用。SDK提供了两个测试工程,测试工程A和测试工程B。 二、测试工程 1、多模态开发板硬件检测工程A 检测的模块包括: - 摄像头 - 显示屏 - 触摸屏 - USB口(csk_usb)…

张宇36讲+1000题重点强化!保100冲120速刷攻略

如果你选择考研时全程跟随张宇的课程,基础阶段使用《张宇30讲》,强化阶段跟着《张宇36讲》,并且还要完成《张宇1000题》,那么你的任务量将非常大。尤其是今年,张宇老师的课程体系发生了重大调整: 张宇老师…

【字符串连接】输入两个字符串,将其进行连接然后输出

输入两个字符串&#xff0c;将其进行连接然后输出 使用C语言代码实现&#xff0c;具体代码&#xff1a; #include<stdio.h>int main(){char str1[100],str2[100];int i0,j0;printf("请输入第一个字符串:");scanf("%s",&str1);printf("请输…

SSRF漏洞与redis未授权访问的共同利用

1.利用靶场Pikachu来认识SSRF漏洞 1.什么是SSRF SSRF漏洞允许攻击者通过向服务器发起请求来伪造请求。这种漏洞的核心在于攻击者能够控制服务器向任意目标地址发起请求&#xff0c;而这些请求通常是攻击者无法直接从客户端发起的。 简单来说&#xff0c;假设你的网站有一个功能…

代谢组数据分析(十九):随机森林构建代谢组预后模型

介绍 建立胃癌(GC)预后模型时,从队列3中的181名患者中,使用右删失结果数据进行了随机分层抽样,分为训练数据集(n = 121)和测试数据集(n = 60)。训练了一个包含1000棵树的随机生存森林(RSF)模型,根据它们基于排列的特征重要性来选择突出的特征。通过再次训练随机生…

探索c++中的类型转化

文章目录 相关引入c中的转化机制const_castreinterpret_caststatic_castdynamic_cast 其他 相关引入 C语言中的类型转换: 有相关性的类型之间才能转换: 非相关性不能转换: c中的转化机制 const_cast 去掉常量属性 指针相同, 值不相同, 本质是编译器对这个常属性的a做了…

关键点检测——HRNet原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

pycharm2024.1.1配置已有的pytorch环境

在pycharm中也可以创建jupyter notebook. 本人最近尝试了2024.2.0.1和2024.1.1&#xff0c;这两种的配置方式略有不同。本文介绍2024.1.1版本的配置方法 新建一个项目 注意这里选择自定义环境和选择现有&#xff0c;并类型是conda 路径选择 这里的路径是我安装的conda目录的S…

甄选范文“NoSQL数据库技术及其应用”,软考高级论文,系统架构设计师论文

论文真题 随着互联网web2.0网站的兴起,传统关系数据库在应对web2.0 网站,特别是超大规模和高并发的web2.0纯动态SNS网站上已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。 NoSQL(Not only SQL )的产生就是为了解…

【STM32】RTT-Studio中HAL库开发教程六:IIC通信--GZP6877D气压传感器

文章目录 一、简介二、寄存器操作三、硬件IIC通信四、模拟IIC通信五、测试验证 一、简介 GZP6877D 型压力传感器采用 SOP6 封装形式&#xff0c;倒钩管的设计可以保证安装的密封性。内有封装的压力传感器与信号调理芯片&#xff0c;对传感器的偏移、灵敏度、温漂和非线性进行数…

(二十)Flink Paimon

数据湖、湖仓一体是当前大数据领域技术发展的重要趋势。近几年开源数据湖技术如 Apache Hudi、Apache Iceberg、Apache Paimon、DeltaLake 等不断涌现,基于湖仓一体架构的统一元数据管理、数据治理也越来越受到关注。从传统数仓到数据湖、湖仓一体架构,从流批一体计算到基于数…

【内网渗透】最保姆级的春秋云镜Brute4Road打靶笔记

目录 ①fcan扫外网&#xff0c;redis主从复制拿shell&#xff0c;suid提权 ②wget下载frp&#xff0c;内网穿透&#xff0c;fscan扫内网 ③wpscan扫wordpress RCE写webshell ④配置文件泄露&#xff0c;连数据库读敏感信息 ⑤fscan爆破MSSQLSERVER密码&#xff0c;MDUT连接…

MyBatis 通用 Mapper5 来了

通用 Mapper 是一个发布于 2014 年的开源项目&#xff0c;是第一个在 MyBatis 中实现了通用 DAO 的开源框架&#xff0c;发布距今接近 10 年&#xff0c;仍然有一部分开发者在使用&#xff0c;项目仍然在维护&#xff0c;主要通过开发者提交 PR 来进行维护。 基于 JDK 17 Jaka…

【Linux】05.Linux 下的编辑器——vim

vim是一个多模式的编辑器。 一、vim的模式 我们主要介绍 vim 的三种模式&#xff0c;分别是命令模式、插入模式和底行模式&#xff0c;各模式的功能区分如下&#xff1a; 命令模式&#xff08;Normal mode&#xff09; 控制屏幕光标的移动&#xff0c;字符、字或行的删除&am…

NOsql数据库Redis

关系型数据库和 NoSQL 数据库 Redis的源码安装 编译 vim /etc/redis/6379.conf bind改成* -::* 关闭protected模式 Redis 主从复制 主从同步过程 环境配置 redis-node1 master redis-node2 slave1 redis-node3 slave2 slave中配置 vim /etc/redis/6379.conf master中操…

设计模式25-访问器模式

设计模式25-访问器模式 访问者模式的动机定义与结构定义结构访问者模式概述结构图解析总结 C代码推导原理代码实例代码 优缺点应用总结 访问者模式的动机 在软件构建过程中&#xff0c;由于需求的改变&#xff0c;某些类层次结构中常常需要增加新的行为方法。此时如果直接在基…

169页PPT丨城投公司战略规划之产业投资商规划

一、规划背景与目标随着经济的不断发展和市场环境的变化&#xff0c;麦肯新城投公司致力于从传统的城市建设主体向产业投资商转型&#xff0c;以实现可持续发展和提升区域经济活力。 目标&#xff1a;在未来5年内&#xff0c;成为具有核心竞争力和广泛影响力的产业投资商&…