设为首页 加入收藏

TOP

winform IO文件操作(一)
2019-09-17 18:33:11 】 浏览:31
Tags:winform 文件 操作

最近做了一个查错工具,运用了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 == 0 && fileArra.Length == 0)
            {
                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('\\') + 1).Contains('.'))
            {
                filepath1 = filepath.Substring(0, filepath.LastIndexOf('.'));
            }

            if (lastfile.Substring(lastfile.LastIndexOf('\\') + 1).Contains('.'))
            {
                lastfile1 = lastfile.Substring(0, lastfile.LastIndexOf('.'));
            }
            //分割文件名
            List<string> fName = splitFileName(filepath1);//被判断文件
            List<string> fname = splitFileName(lastfile1);//前一个文件
            //如果两个文件名都不能被分割
            if (fName.Count == 0 && fname.Count == 0)
            {
                string path1 = lastfile1.Substring(lastfile1.LastIndexOf("\\") + 1);
                string path2 = filepath1.Substring(filepath1.LastIndexOf("\\") + 1);
                int file1 = int.Parse(path1);
                int file2 = int.Parse(path2);
                if ((file2 - 1) != file1)
                {
                    signfile("不连续文件", filepath);
                    return;
                }
            }
            //如果两个文件名分割的正确,即分割后数组不为空
            else if (fName.Count != 0 && fname.Count != 0)
            {
                if (fname[0].Equals(fName[0]))//判断最后一个分隔符前的字符串相同
                {
                    int file1 = int.Parse(fname[1]);
                    int file2 = int.Parse(fName[1]);
                    if ((file2 - 1) != file1)
                    {
                        signfile("不连续文件", filepath);//标记文件
                    }
                }
                else
                {
                    signfile("不连续文件", filepath);//标记文件
                }
            }
            else
            {
                if (fName.Count == 0)
                {
                    signfile("不连续文件", filepath);//标记文件
                    return;
                }

                if (fname.Count == 0)
                {
                    signfile("不连续文件", lastfile);//标记文件
                    return;
                }
            }
        }
检查文件名是否连续的方法

3.按照用户指定分隔符分割文件名

public static List<string> splitFileName(string filepath)
        {
            string fileName = filepath.Substring(filepath.LastIndexOf('\\') + 1);
            List<string> fNameArr =
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用高性能Pipelines构建.NET通讯.. 下一篇dotnet core2.2 通过虚拟机发布到..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目