winform IO文件操作
最近做了一个查错工具,运用了winform文件操作的知识,做了几点总结,不全面,只总结了几点项目里用过的知识(关于以下内容只是个人的理解和总结,不对的地方请多指教,有补充的可以评论留言大家一起讨论学习)。
一:基础知识
1.根据文件路径得到文件夹对象:DirectoryInfo di = new DirectoryInfo(filepath);
2.根据文件路径得到路径下所有的子目录的名称(包含路径)的集合:
string[] diArray = Directory.GetDirectories(filepath);//得到文件夹下的文件夹的集合
string[] fiArray = Directory.GetFiles(filepath);//得到文件夹下文件的集合(包含文件路径)
二:关于文件操作速度慢的原因:
因为以前没怎么用到够winform io文件这一块的操作知识,所以在项目中遇到很多问题,尤其是运行速度这一块,我发现并总结了以下几点导致程序运行缓慢的原因:
1.封装了对文件进行操作的方法时,在传参时尽量不要传文件对象,而是传路径,因为每次实例化对象时都在程序内部占了存储,我们在传对象作为参数的时候虽然方便了,但是也占了内存了。尽量减少对文件对象的实例化
2.实例化文件对象后,在用完之后进行释放掉。file.Dispose();
3.得到图片对象时,尽量不要用Image im = Image.FromFile(path);因为我做图像分辨率查错时,用了这个得到对象,225张图片判断分辨率用了三十多秒才查出来,检查了很久都没找到问题,后来发现是这句代码的问题,我改成了下面这两句代码就解决了
FileStream myFileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
Image img = Image.FromStream(myFileStream, false, false);
三:查错工具一:图像查错之逻辑代码
1.检查文件夹是不是空文件夹
/// <summary>
/// 检查是否是空文件夹
/// </summary>
/// <param name="di"></param>
public static void checkEmptyFile(string di)
{
string[] fileArra = Directory.GetFiles(di);
string[] filesArra = Directory.GetDirectories(di);
if (filesArra.Length == && fileArra.Length == )
{
signfile("空文件夹", di);
}
}
文件夹是否为空的方法
2.检查文件名是否连续
/// <summary>
/// 检查文件名是否连续
/// </summary>
/// <param name="filepath">被判断的文件路径</param>
/// <param name="lastfile">被判断文件夹的前一个文件路径</param>
public static void checkFilesName(string filepath, string lastfile)
{
string filepath1 = filepath;
string lastfile1 = lastfile;
//根据文件路径得到文件名
if (filepath.Substring(filepath.LastIndexOf('\\') + ).Contains('.'))
{
filepath1 = filepath.Substring(, filepath.LastIndexOf('.'));
} if (lastfile.Substring(lastfile.LastIndexOf('\\') + ).Contains('.'))
{
lastfile1 = lastfile.Substring(, lastfile.LastIndexOf('.'));
}
//分割文件名
List<string> fName = splitFileName(filepath1);//被判断文件
List<string> fname = splitFileName(lastfile1);//前一个文件
//如果两个文件名都不能被分割
if (fName.Count == && fname.Count == )
{
string path1 = lastfile1.Substring(lastfile1.LastIndexOf("\\") + );
string path2 = filepath1.Substring(filepath1.LastIndexOf("\\") + );
int file1 = int.Parse(path1);
int file2 = int.Parse(path2);
if ((file2 - ) != file1)
{
signfile("不连续文件", filepath);
return;
}
}
//如果两个文件名分割的正确,即分割后数组不为空
else if (fName.Count != && fname.Count != )
{
if (fname[].Equals(fName[]))//判断最后一个分隔符前的字符串相同
{
int file1 = int.Parse(fname[]);
int file2 = int.Parse(fName[]);
if ((file2 - ) != file1)
{
signfile("不连续文件", filepath);//标记文件
}
}
else
{
signfile("不连续文件", filepath);//标记文件
}
}
else
{
if (fName.Count == )
{
signfile("不连续文件", filepath);//标记文件
return;
} if (fname.Count == )
{
signfile("不连续文件", lastfile);//标记文件
return;
}
}
}
检查文件名是否连续的方法
3.按照用户指定分隔符分割文件名
public static List<string> splitFileName(string filepath)
{
string fileName = filepath.Substring(filepath.LastIndexOf('\\') + );
List<string> fNameArr = new List<string>();
string fgf = ToolHelper.GetXmlNumber("ImgInspect", "fgf");
try
{
fNameArr.Add(fileName.Substring(, fileName.LastIndexOf(fgf)));//最后一个分隔符前的字符串
fNameArr.Add(fileName.Substring(fileName.LastIndexOf(fgf) + ));//最后一个分隔符后的字符串
}
catch (Exception ex)
{
//throw;
}
return fNameArr; }
指定字符分割文件名
4.查询图像分辨率
/// <summary>
/// 根据分辨率查错
/// </summary>
/// <param name="path"></param>
public static void checkImageDpi(string path)
{
try
{
FileStream myFileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
Image img = Image.FromStream(myFileStream, false, false);
//得到用户输入的分辨率
int dpi = int.Parse(ckImageMethod.strDpi);
//获取此图形的水平分辨率(即水平dpi)(以像素/英寸为单位)
int dpiX = (int)img.HorizontalResolution;
//垂直分辨率
int dpiY = (int)img.VerticalResolution;
if (dpiX != dpi || dpiY != dpi)
{
signfile("dpi不正确图片", path);
}
img.Dispose();
myFileStream.Dispose(); }
catch (Exception ex)
{
ToolHelper.ErrorInfoSave("图片Dpi:" + path + ex.Message);
} }
图像分辨率查错
5.保存错误信息到错误文档,创建txt文档保存
/// <summary>
/// 保存错误信息到文本文档
/// </summary>
/// <param name="StrError">错误信息</param>
public static void ErrorInfoSave(string StrError)
{
string TxtName = DateTime.Now.ToString("yyyyMMddhhmmss") + "_Error.txt";
string TxtPath = System.AppDomain.CurrentDomain.BaseDirectory + @"Error";
if (!Directory.Exists(TxtPath))
{
Directory.CreateDirectory(TxtPath);
}
FileStream stream = new FileStream(TxtPath + @"\" + TxtName, FileMode.Create);
StreamWriter Writer = new StreamWriter(stream);
Writer.WriteLine(StrError + "\r\n");
Writer.Dispose();
Writer.Close();
stream.Dispose();
stream.Close();
}
保存错误信息
winform IO文件操作的更多相关文章
- Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录
Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录 这里先简单的贴下常用的方法: File.separator //当前系统文件分隔符 File.pathSeparator // ...
- (Unity)XML文件读写与IO文件操作类使用介绍
using System.Xml; //xml文件操作命名空间 #region 写入操作 void WriteXMLFile(string _fileName) { Xm ...
- Linux下普通IO文件操作函数---C语言
普通文件IO总结 FILE结构体 typedef struct { int level; /*填充/清空一级缓存*/ unsigned flag; /*文件状态指针*/ ...
- IO文件操作
× 目录 [1]IO文件的操作 [2]Directory类 [3]File类 [4]FileStream类 [5]文本文件的操作 一.IO文件的操作: .net中对文件操作,经常会用到这样几个类: ...
- Java学习之==>IO文件操作体系
一.概述 在整个 Java.io 中最重要的就是5个类和一个接口.5个类指的是 File.InputStream.OutputStream.Reader.Writer,一个接口指的是Serializa ...
- winform INI文件操作辅助类
using System;using System.Runtime.InteropServices;using System.Text; namespace connectCMCC.Utils{ // ...
- Python3中IO文件操作的常见用法
首先创建一个文件操作对象: f = open(file, mode, encoding) file指定文件的路径,可以是绝对路径,也可以是相对路径 文件的常见mode: mode = “r” # ...
- java IO文件操作简单基础入门例子,IO流其实没那么难
IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 ...
- java io 文件操作
package com.svse; import java.io.File; import java.io.IOException; public class IOTest { public stat ...
随机推荐
- 白话SCRUM之一:SCRUM 的三个角色
在SCRUM方法中将项目的利益相关者分成两大类:Pigs角色与chickens角色,pigs即为项目组的实际参与人员,chickens为项目组的外部人员,包括经理.最终用户等等.Pigs在scrum中 ...
- Mybatis ResultMap多表映射DTO
解决问题:n+1问题,之前我的习惯是拿到单表里面的数据,然后遍历,再拿到一个与其他表对应的逻辑上的外键,然后for循环去查找其他表的数据(原因是数据量小,没有在意,还有主要是不想建外键,你知道的,外键 ...
- mybatis框架之多参数入参--传入Map集合
需求:查询出指定性别和用户角色列表下的用户列表信息 实际上:mybatis在入参的时候,都是将参数封装成为map集合进行入参的,不管你是单参数入参,还是多参数入参,都是可以封装成map集合的,这是无可 ...
- <Trie> 212 <Array> 229
212. Word Search II class TrieNode{ char val; TrieNode[] children; String word; public TrieNode(char ...
- ASP.NET CoreMVC 中的控制器
Controller in ASP.NET Core MVC 在本节中,我们将讨论 Controller 是什么以及它在 ASP.NET Core MVC 中的作用. Fiddler 需要大家提前装一 ...
- calc()在less中编译报错
calc()对大家来说,或许很陌生,不太会相信calc()是css中的部分.因为看其外表像个函数,既然是函数为何又出现在CSS中呢? calc() 函数用于动态计算长度值. 需要注意的是,运算符前后都 ...
- [学习笔记] 网络最大流的HLPP算法
#define \(u\)的伴点集合 与\(u\)相隔一条边的且\(u\)能达到的点的集合 \(0x00~ {}~Preface\) \(HLPP(Highest~Label~Preflow~Push ...
- Linux性能优化实战学习笔记:第二十一讲
一 内存性能指标 1.系统内存使用情况 共享内存:是通过tmpfs实现的,所以它的大小也就是tmpfs使用的大小了tmpfs其实也是一种特殊的缓存 可用内存:是新进程可以使用的最大内存它包括剩余内存和 ...
- oracle--AWR,ADDM,ASH区别
一,ASH (Active Session History) ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件.不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成. ...
- 推荐一款健康App 多喝水,引领全民时尚喝水生活习惯
推荐一款健康App 多喝水,引领全民时尚喝水生活习惯 1 介绍 多喝水,一款鼓励大众喝水的APP.我们倡导大众健康生活,培养人们爱喝水的习惯,让每一次喝水,都能产生价值,让人们在喝水的同时,可享受赚钱 ...