最近做了一个查错工具,运用了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文件操作的更多相关文章

  1. Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录

    Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录 这里先简单的贴下常用的方法: File.separator //当前系统文件分隔符 File.pathSeparator // ...

  2. (Unity)XML文件读写与IO文件操作类使用介绍

    using System.Xml;                //xml文件操作命名空间 #region 写入操作 void WriteXMLFile(string _fileName) { Xm ...

  3. Linux下普通IO文件操作函数---C语言

    普通文件IO总结 FILE结构体    typedef struct   {       int level; /*填充/清空一级缓存*/     unsigned flag; /*文件状态指针*/ ...

  4. IO文件操作

    × 目录 [1]IO文件的操作 [2]Directory类 [3]File类 [4]FileStream类 [5]文本文件的操作 一.IO文件的操作:   .net中对文件操作,经常会用到这样几个类: ...

  5. Java学习之==>IO文件操作体系

    一.概述 在整个 Java.io 中最重要的就是5个类和一个接口.5个类指的是 File.InputStream.OutputStream.Reader.Writer,一个接口指的是Serializa ...

  6. winform INI文件操作辅助类

    using System;using System.Runtime.InteropServices;using System.Text; namespace connectCMCC.Utils{ // ...

  7. Python3中IO文件操作的常见用法

    首先创建一个文件操作对象: f = open(file, mode, encoding) file指定文件的路径,可以是绝对路径,也可以是相对路径 文件的常见mode: mode = “r”   # ...

  8. java IO文件操作简单基础入门例子,IO流其实没那么难

    IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 ...

  9. java io 文件操作

    package com.svse; import java.io.File; import java.io.IOException; public class IOTest { public stat ...

随机推荐

  1. Windows 2003 IIS6.0下配置ASP+MySQL+PHP+ISAPI_Rewrite+Zend+Xcache

    windows 2003,自己买吧... 安装IIS6.0:安装系统后在"控制面板"->"添加或删除程序"->"添加/删除Windows组 ...

  2. 构建Apache Web服务器

    Apache 是世界使用排名第一的 Web 服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一.Apache工作模式有多种,其 ...

  3. windows API下的模板缓冲(stencil buffer)

    在windows API搭建的OpenGL窗口中使用模板缓冲,需要在像素格式描述表中设置stencil buffer位宽为8,这样窗口会自动生成stencil buffer,然后可以在opengl环境 ...

  4. 【洛谷P3756】[CQOI2017]老C的方块(最小割)

    洛谷 题意: 给出一个网格图类似于这样: 现在给出一个\(n*m\)大小的网格,之后会给出一些点,若某些点相连形成了如下的几个图案,那么就是不好的. 现在可以删去一些点,但删除每个点都有一些代价,问最 ...

  5. 构建根文件系统之init进程分析

    busybox是ls.cp等命令的集合. 执行ls时,实际上是执行了busybox ls 执行cp时,实际上是执行了busybox cp 分析init程序之前,再让我们回想一下我们的目标:u-boot ...

  6. python--微信小程序“跳一跳‘外挂

    参考网站:http://blog.csdn.net/LittleBeautiful/article/details/78955792 0x00:准备工具: Windows 10: 一个安卓真机 pyt ...

  7. 201871010101-陈来弟《面相对象程序设计(java)》第十周学习总结

    201871010101-陈来弟<面相对象程序设计(java)>第十周学习总结 实验八异常.断言与日志 实验时间 2019-11-1 1.实验目的与要求 (1) 掌握java异常处理技术: ...

  8. 唐敬博-201871010118 《面向对象程序设计(java)》第七周学习总结

    在博客园撰写博客(随笔),总结7周实验内容,作业格式要求如下: 博文名称:学号-姓名<面向对象程序设计(java)>第七周学习总结(1分) 博文正文开头格式:(2分) 项目 内容 这个作业 ...

  9. 第十一周博客作业 <西北师范大学| 周安伟>

    第十一周助教作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求链接https://www.cnblogs.com/nwnu-daizh/p/107615 ...

  10. 微信小程序 - 结构目录 | 配置介绍

    结构目录 小程序框架提供了自己的视图层描述语言 WXML 和 WXSS,以及 JavaScript,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑. 一.小程序文件结构和传 ...