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 ...
随机推荐
- Windows 2003 IIS6.0下配置ASP+MySQL+PHP+ISAPI_Rewrite+Zend+Xcache
windows 2003,自己买吧... 安装IIS6.0:安装系统后在"控制面板"->"添加或删除程序"->"添加/删除Windows组 ...
- 构建Apache Web服务器
Apache 是世界使用排名第一的 Web 服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一.Apache工作模式有多种,其 ...
- windows API下的模板缓冲(stencil buffer)
在windows API搭建的OpenGL窗口中使用模板缓冲,需要在像素格式描述表中设置stencil buffer位宽为8,这样窗口会自动生成stencil buffer,然后可以在opengl环境 ...
- 【洛谷P3756】[CQOI2017]老C的方块(最小割)
洛谷 题意: 给出一个网格图类似于这样: 现在给出一个\(n*m\)大小的网格,之后会给出一些点,若某些点相连形成了如下的几个图案,那么就是不好的. 现在可以删去一些点,但删除每个点都有一些代价,问最 ...
- 构建根文件系统之init进程分析
busybox是ls.cp等命令的集合. 执行ls时,实际上是执行了busybox ls 执行cp时,实际上是执行了busybox cp 分析init程序之前,再让我们回想一下我们的目标:u-boot ...
- python--微信小程序“跳一跳‘外挂
参考网站:http://blog.csdn.net/LittleBeautiful/article/details/78955792 0x00:准备工具: Windows 10: 一个安卓真机 pyt ...
- 201871010101-陈来弟《面相对象程序设计(java)》第十周学习总结
201871010101-陈来弟<面相对象程序设计(java)>第十周学习总结 实验八异常.断言与日志 实验时间 2019-11-1 1.实验目的与要求 (1) 掌握java异常处理技术: ...
- 唐敬博-201871010118 《面向对象程序设计(java)》第七周学习总结
在博客园撰写博客(随笔),总结7周实验内容,作业格式要求如下: 博文名称:学号-姓名<面向对象程序设计(java)>第七周学习总结(1分) 博文正文开头格式:(2分) 项目 内容 这个作业 ...
- 第十一周博客作业 <西北师范大学| 周安伟>
第十一周助教作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求链接https://www.cnblogs.com/nwnu-daizh/p/107615 ...
- 微信小程序 - 结构目录 | 配置介绍
结构目录 小程序框架提供了自己的视图层描述语言 WXML 和 WXSS,以及 JavaScript,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑. 一.小程序文件结构和传 ...