C# Winform编程(7)文件处理技术

文件处理技术

  • System.IO命名空间
    • System.IO命名空间常用的类
    • System.IO命名空间常用的枚举
  • File类的常用方法
  • FileInfo类的常用方法
  • File类和FileInfo类的区别
  • 文件夹类Directory的常用方法

System.IO命名空间

System.IO命名空间常用的类

说明
File提供用于创建,复制,删除,移动和打开文件的静态方法,并协助创建FileStream对象
FileInfo提供用于创建,复制,删除,移动和打开文件的实例方法,并且帮助创建FileStream对象。无法继承此类
FileStream公开以文件为主的Stream,即支持同步读写操作,也支持异步读写操作
BinaryReader用特定的编码将基元数据类型读作二进制值
BinaryWriter以二进制形式将基元类型写入流,并支持用特定的编码写入字符串
BufferedStream给另一流上的读写操作添加一个缓冲层。无法继承此类
Directory公开用于创建,移动和枚举目录和子目录的静态方法。无法继承此类
DirectoryInfo公开用于创建,移动和枚举目录和子目录的实例方法。无法继承此类
Path对包含文件或目录路径信息的String实例执行操作。这些操作是以跨平台的方式执行的
StreamReader实现一个TextReader,使其以一种特定的编码从字节流中读取字符
StreamWriter实现一个TextWriter,使其以一种特定的编码向字节流中写入字符
FileSysWatcher侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件

System.IO命名空间常用的枚举

枚举说明
FileMode指定操作系统打开文件的方式
FileShare包含用于控制其他FileStream对象对同一文件可以具有的访问类型的常数
FileAccess定义用于控制对文件的读访问,写访问或读/写访问的常数

File类的常用方法

方法说明
Move将指定文件移到新位置,并提供指定新文件名的选项
Delete删除指定的文件。如果指定的文件不存在,则不引发异常
Copy已重载。将现有文件复制到新文件
CreateText创建或打开一个文件用于写入UTF-8编码的文本
OpenText打开现有UTF-8编码文本文件以进行读取
Open已重载。打开指定路径上的FileStream
private void FileDemo()
{string path = @"c:\temp\MyTest.txt";if (!File.Exists(path)){// 创建文件以便写入内容using (StreamWriter sw = File.CreateText(path)){sw.WriteLine("Hello");sw.WriteLine("And");sw.WriteLine("Welcome");}}// 打开文件,从中读数据using (StreamReader sr = File.OpenText(path)){string s = "";while ((s = sr.ReadLine()) != null){Console.WriteLine(s);}}try{string path2 = path + "temp";// 确认将要复制成的文件是否已经有同名的文件存在File.Delete(path2);// 复制文件File.Copy(path, path2);Console.WriteLine("{0} was copied to {1}.",path, path2 );// 删除新生成的文件File.Delete(path2);Console.WriteLine("{0} was successfully deleted.", path2);}catch (Exception ex) {Console.WriteLine("The process failed:{0}", ex.ToString());}
}

FileInfo类的常用方法

FileInfo提供创建,复制,删除,移动和打开文件的实例方法,并且帮助创建FileStream对象。

属性说明
Attributes获取或设置当前FileSystemInfo对象的FileAttributes属性(从FileSystemInfo类继承)
CreationTime获取或设置当前FileSystemInfo对象的创建时间(从FileSystemInfo类继承)
Directory获取父目录的实例
DirectoryName获取表示目录的完成整路径的字符串
Exists已重写。获取指示文件是否存在的值
Extension获取表示文件扩展名部分的字符串(从FileSystemInfo类继承)
        private void FileInfoDemo(){string fileName = "C:\\temp\\autoexec.bat";FileInfo fileInfo = new FileInfo(fileName);if (fileInfo.Exists){return;}Console.WriteLine("{0} has a directoryName of {1}", fileName, fileInfo.DirectoryName);}

File和FileInfo综合示例

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;namespace FileProcess
{public partial class FormFileDemo : Form{public FormFileDemo(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string target = @"C:\temp\1.txt";if (File.Exists(target)){File.Delete(target);}File.CreateText(target);MessageBox.Show("文件创建成功!");}private void button2_Click(object sender, EventArgs e){          string someFile = @"C:\temp\F1.txt";string target = @"C:\temp\1.txt";if (!File.Exists(someFile)){MessageBox.Show("文件不存在!");}else{if (File.Exists(target)){File.Delete(target);}File.Copy(someFile, target);MessageBox.Show("文件复制成功!");}}private void button3_Click(object sender, EventArgs e){string target = @"C:\temp\1.txt";if (File.Exists(target)){File.Delete(target);MessageBox.Show("文件删除成功!");}}private void button4_Click(object sender, EventArgs e){string somefile = @"C:\temp\1.txt";FileInfo  myFile = new FileInfo(somefile);if (myFile.Exists){MessageBox.Show("文件已经存在");label1.Text = "创建时间:" + myFile.CreationTime.ToString();label2.Text = "文件夹:" + myFile.Directory.ToString();label3.Text = "文件夹名称:" + myFile.DirectoryName.ToString() + ",文件扩展名:" + myFile.Extension.ToString();}else {MessageBox.Show("文件不存在");}}}
}

在这里插入图片描述

File类和FileInfo类的区别

  • File为静态类,可以直接使用;FileInfo需要实例化后才能使用。
  • 从性能上考虑,如果要多次操作文件,不管是否针对相同文件,则应使用FileInfo。
  • 每次通过File类调用某个方法时,都需要占用一定的CPU资源,而FileInfo类只在创建对象时执行一次安全检查。

文件夹类Directory的常用方法

Directory类公开用于创建,移动和枚举通过目录和子目录的静态方法。无法继承此类。

方法说明
Move蒋文件或目录及其内容移动到新位置
Delete已重载。删除指定的目录
CreateDirectory已重载。创建指定路径中的所有目录
GetCreationTime获取目录的创建日期和时间
GetCurrentDirectory获取引用程序的当前工作目录
GetFiles已重载。返回指定目录中的文件的名称
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;namespace FileProcess
{public partial class FormDirectory : Form{public FormDirectory(){InitializeComponent();}private static string directory_path = "C:\\temp\\dir1";private static string directory_otherpath = "C:\\temp\\dir2";/// <summary>/// Directory类常用方法/// </summary>private void DirectoryDemo(){try{// 获取当前目录创建时间DateTime dt = Directory.GetCreationTime(Environment.CurrentDirectory);if (DateTime.Now.Subtract(dt).TotalDays > 364){Console.WriteLine("This directory is over a year old.");}else if (DateTime.Now.Subtract(dt).TotalDays > 30){Console.WriteLine("This directory is over a month old.");}else if (DateTime.Now.Subtract(dt).TotalDays <= 1){Console.WriteLine("This directory is less than a day old.");}else{Console.WriteLine("This directory was create on {0}", dt);}}catch (Exception ex){Console.WriteLine("The process failed:{0}", ex.ToString());}}private void button1_Click(object sender, EventArgs e){DirectoryDemo();}/// <summary>/// 创建目录/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){try{Directory.CreateDirectory(directory_path);button2.Enabled = false;button3.Enabled = true;button4.Enabled = true;button5.Enabled = true;button6.Enabled = true;}catch (Exception ex) {MessageBox.Show("磁盘操作错误,原因:"+Convert.ToString(ex), "警报");}}/// <summary>/// 删除目录/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button3_Click(object sender, EventArgs e){try{Directory.Delete(directory_path);button2.Enabled = true;button3.Enabled = false;button4.Enabled = false;button5.Enabled = false;button6.Enabled = false;MessageBox.Show("文件夹已删除", "警报");}catch (Exception ex){MessageBox.Show("磁盘炒作错误,原因:"+Convert.ToString(ex), "警报");                    }}/// <summary>/// 移动目录/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button4_Click(object sender, EventArgs e){try{Directory.Move(directory_path, directory_otherpath);MessageBox.Show("文件夹移动成功","警报");}catch (Exception ex){MessageBox.Show("磁盘操作错误,原因:"+Convert.ToString(ex), "警报");}}/// <summary>/// 目录创建时间/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button5_Click(object sender, EventArgs e){try{MessageBox.Show(string.Format("{0}:G", Directory.GetCreationTime(directory_path)), "提示");}catch (Exception ex){MessageBox.Show("磁盘操作错误,原因:"+Convert.ToString(ex), "报警");}}/// <summary>/// 返回指定目录/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button6_Click(object sender, EventArgs e){try{string[] fileEntries = Directory.GetFiles(directory_path);if (fileEntries.Length != 0){foreach (string s in fileEntries){if (File.Exists(s)){MessageBox.Show("内有文件信息:" + s, "提示");}}}else {MessageBox.Show("空文件夹", "提示");}}catch (Exception ex){MessageBox.Show("磁盘操作错误,原因:"+Convert.ToString(ex), "报警");}}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数之道 08】走进“卷积神经网络“,了解图像识别背后的原理

卷积神经网络 CNN模型的架构Cnn 的流程第一步 提取图片特征提取特征的计算规则 第二步 最大池化第三步 扁平化处理第四步 数据条录入全连接隐藏层 b站视频 CNN模型的架构 图片由像素点组成&#xff0c;最终成像效果由背后像素的颜色数值所决定的 有这样的一个66的区域&#x…

YOLOv5改进实战 | 更换主干网络Backbone(三)之轻量化模型Shufflenetv2

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

2023年中国纸箱机械优点、市场规模及发展前景分析[图]

纸箱机械行业是指涉及纸箱生产和加工的机械设备制造、销售和相关服务的产业。这个行业的主要任务是设计、制造和提供用于生产各种类型和规格纸箱的机械设备&#xff0c;以满足包装行业对纸箱的不同需求。 纸箱机械行业优点 资料来源&#xff1a;共研产业咨询&#xff08;共研网…

SpringBoot + MyBatis 在 jar 中可以启动但是 Idea中无法启动的原因

现象 在idea中启动始终卡住&#xff0c;查看线程堆栈发现一直在mybatis的处理过程中&#xff0c;细究了一下堆栈发现mybatis有使用远程方式加载类的情况&#xff0c;并且此时cpu会飙升&#xff0c; 在命令行中使用java -jar 的形式可以正常启动&#xff0c;但是在idea中启动始…

在 Visual Studio Code (VS Code) 中设置

在 Visual Studio Code (VS Code) 中设置代理服务器的详细教程如下&#xff1a; 打开 Visual Studio Code。 在顶部菜单栏中&#xff0c;点击 "File"&#xff08;文件&#xff09; > "Preferences"&#xff08;首选项&#xff09; > "Settings…

解剖—单链表相关OJ练习题

目录 一、移除链表元素 二、找出链表的中间节点 三、合并两个有序链表 四、反转链表 五、求链表中倒数第k个结点 六、链表分割 七、链表的回文结构 八、判断链表是否相交 九、判断链表中是否有环(一) 十、 判断链表中是否有环(二) 注&#xff1a;第六题和第七题牛…

win11快速打开蓝牙设置的方法

win11快速打开蓝牙设置的方法 Windows 11 中快速连接蓝牙设备的 3 种方法&#xff01;_哔哩哔哩_bilibili 如何为Windows设置快捷键&#xff1f;_百度知道 (baidu.com) Win11怎么隐藏文件夹?Win11通过命令隐藏文件夹的方法_windows11_Windows系列_操作系统_脚本之家 (jb51.net…

《动手学深度学习 Pytorch版》 9.5 机器翻译与数据集

机器翻译&#xff08;machine translation&#xff09;指的是将序列从一种语言自动翻译成另一种语言&#xff0c;基于神经网络的方法通常被称为神经机器翻译&#xff08;neural machine translation&#xff09;。 import os import torch from d2l import torch as d2l9.5.1 …

Kotlin(七) 接口

接口是用于实现多态编程的重要组成部分。我们都知道&#xff0c;Java是单继承结构的语言&#xff0c;任何一个类最多只能继承一个父类&#xff0c;但是却可以实现任意多个接口&#xff0c;Kotlin也是如此。 首先创建一个Study接口&#xff0c;在创建文件窗口选择“Interface…

面对DDoS和APT攻击,我们该如何有效防御?

关于DDoS&#xff08;Distributed Denial of Service&#xff09;分布式拒绝服务攻击&#xff0c;是指攻击者通过技术手段&#xff0c;在很短的时间内对目标攻击网站发出大量请求&#xff0c;极大地消耗相关网站的主机资源&#xff0c;导致其无法正常服务。 打个比方来说&#…

AI驱动的未来:探索人工智能的无限潜力 | 开源专题 No.39

这一系列开源项目代表着多个领域的最新技术成果&#xff0c;包括深度学习、自然语言处理、计算机视觉和分布式训练。它们共同的特点是致力于教育、资源分享、开源精神、多领域应用以及性能和效率的追求&#xff0c;为广大开发者、研究者和学生提供了宝贵的工具和知识&#xff0…

开源网安受邀参加数字安全高峰论坛,为数字经济发展保驾护航

​10月19日&#xff0c;“提升数字安全技术&#xff0c;护航数字经济发展”高峰论坛在常州创意产业园圆满完成。本次论坛由常州国家高新区管委会、常州市工业和信息化局、常州市大数据管理中心主办&#xff0c;聚焦“数据安全”主题&#xff0c;邀请了超百位专家及企业代表共同…

工业交换机定制化解决方案:光路科技的工业PoE交换机

PoE交换机能代替普通工业交换机使用吗&#xff1f; Power over Ethernet (PoE)交换机和普通工业交换机在某些情况下可以互相替代&#xff0c;但有些情况下则不太适合。PoE交换机具有额外的供电能力&#xff0c;用于同时为网络设备提供数据和电力。如果您的应用中只需要传输数据…

opencv入门到精通——图片,视频,摄像头的读取与保存

简介 OpenCV是一个流行的开源计算机视觉库&#xff0c;由英特尔公司发起发展。它提供了超过2500个优化算法和许多工具包&#xff0c;可用于灰度、彩色、深度、基于特征和运动跟踪等的图像处理和计算机视觉应用。OpenCV主要使用C语言编写&#xff0c;同时也支持Python、Java、C等…

C++ 友元函数和友元类

前言 在本文中&#xff0c;您将学习在C 中创建友元函数和友元类&#xff0c;并在程序中有效地使用它们。OOP的重要概念之一是数据隐藏&#xff0c;即非成员函数无法访问对象的私有或受保护的数据。但是&#xff0c;有时这种限制可能迫使程序员编写冗长而复杂的代码。因此&#…

AJAX: 对话框大全

AJAX:$.ajax({url: "/admin/cutting/getDataWeek",type: "GET",data:{},dataType:json,success: function (res) {if (res.code 1) {}},error:function (error) {console.log(请求失败);console.log(error);}}); $(.sub).unbind(click).click(funct…

Note——torch.size() umr_maximum() array.max() itertools.product()

torch.size Problem TypeError: ‘torch.Size’ object is not callable Reason Analysis torch.Size函数不可调用 因为torch只可以.size() 或 shape Solution 将y.shape()替换为y.size() 或 y.shape ytorch.normal(0,0.01,y.size())2 return umr_maximum(a, axis, None…

【斗罗二】天梦哥告白冰帝,唐三再返场,雨浩通过冰帝考验,觉醒新武魂

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析斗罗大陆2绝世唐门国漫资讯。 斗罗大陆动画第二部绝世唐门第19集已经更新了&#xff0c;全都是霍雨浩与天梦哥在极北之地&#xff0c;吸引冰帝加入造神计划的过程。不仅有天梦哥的爱情宣言告白&#xff0c;唐三也再次限时…

Python学习笔记——类、魔术方法

食用说明&#xff1a;本笔记适用于有一定编程基础的伙伴们。希望有助于各位&#xff01; 类 类的运用很常见&#xff1a;在大部分情况下&#xff0c;对一些特有的对象&#xff0c;可以使用特定的类来指向它&#xff1a; class Person:name unknownage -1sex 0partner No…

逗号表达式

#include<stdio.h> int cmp() {return(2,1); } int main() {int z cmp();printf("%d",z);return 0; } 逗号表达式括号里的优先级是自左向右&#xff0c;最后一个值为最终的结果。