C# WinForm 开发中删除文件异常处理心得

这几天在帮公司人力那边写一个邮件群发器,之前的开发过程都很顺利,就是在邮件发送完成之后删除项目下excel文件是出问题了,一直提示我"该文件已经被其他进程所占用,删除异常",字我记不住了,意思大概这样吧。当时我就纳闷了,文件流我也释放了并且关闭了,垃圾回收也加上了还是不能解决问题,几天在网上查了写资料,忽然发现既然文件被其他进程占用那我在写这个文件的时候先把文件流给锁上 这不就可以了嘛,果然,把流锁上立刻问题解决了。其实这也不是什么很难的问题,只不过我们有时候在处理问题的时候遗漏了一些东西或者没考虑全面而已。废话不多说了,我把处理代码帖上吧。

1、这是写文件的时 处理办法。

#region 把worksheet 另存为excel 杨大鑫
        public static void SaveFile(Worksheet sheet, string sheetName, string fileName)
        {
            using (MemoryStream stream = OutFileToStream(sheet, sheetName))
            {
                using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write,FileShare.Write))
                {

                    byte[] data = stream.ToArray();
                    fs.Lock(0, data.Length);//加锁,防止其他进程使用该文件,好处是:再同步删除该文件时候不会出现异常
                    fs.Write(data, 0, data.Length);
                    fs.Flush();
                    fs.Dispose();
                    fs.Close();
                }
            }
        }

  2、发送邮件完成后删除文件的处理

//把本地已经发送过得邮件 excel删除掉
                foreach (Email mail in this.successEmails)
                {
                    string filePath = myUtils.FileFolder + "SendFiles/" + mail.recipientEmail + ".xls";
                    if (File.Exists(filePath))
                    {
                        File.Delete(filePath);
                        //垃圾回收
                        GC.Collect();
                    }
                }
时间: 2024-08-25 23:19:47

C# WinForm 开发中删除文件异常处理心得的相关文章

java/android开发中删除文件

在java或者android开发中经常遇到要删除一个文件夹及其子文件的需求,本文主要总结了自己开发中遇到并且使用过的两种删除文件和文件夹的方法. 1.如果仅仅是删除一个文件可以使用以下代码,传入文件路径即可 public static void deleteFile(String path) { File file = new File(path); file.delete(); } 2.如果需要删除一个非空文件夹,则需要遍历整个文件夹下子文件,进行递归删除 public static void

在Winform开发中使用日程控件XtraScheduler(2)--深入理解数据的存储

在上篇随笔<在Winform开发中使用日程控件XtraScheduler>中介绍了DevExpress的XtraScheduler日程控件的各种使用知识点,对于我们来说,日程控件不陌生,如OutLook里面就有日历的模块,但是这个日程控件真的是很复杂的一个控件,需要全面掌握可能需要花费很多的时间去了解,由于是技术研究,我总是希望把它常用的功能剖析的更加彻底一些,前面随笔也介绍了它的存储功能,把它基于实体类的方式存储在数据库里面,不过介绍的还不够,本文继续上面的内容,进行数据存储方面的介绍. 在

Linux中删除文件,磁盘空间未释放问题追踪

在客户使用我们产品后,发现一个问题:在删除了文件后,磁盘空间却没有释放.是有进程在打开这个文件,还是其他情况?我们一起来看看一下两个场景 一. 场景一:进程打开此文件 当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除.当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间. 我们发现剩余磁盘空间比较少时,回去删除一些大的临时文件或者log文件,如果删除之后会发现磁盘空间并未减少,那么可以通过"lsof"命令去查看正在使用该文件的

Couldn&#39;t load libPassword from loader:NDK开发中C文件编译成cpu的so类库时,找不到类库报错的原因之一

LogCat输出: 03-03 12:42:32.665: E/AndroidRuntime(32432): FATAL EXCEPTION: main03-03 12:42:32.665: E/AndroidRuntime(32432): Process: com.toro.passwordencode, PID: 3243203-03 12:42:32.665: E/AndroidRuntime(32432): java.lang.UnsatisfiedLinkError: Couldn't

EBS OAF开发中的错误/异常处理(ErrorHandling) (转)

原文地址 EBS OAF开发中的错误/异常处理(ErrorHandling) EBS OAF开发中的错误/异常处理(ErrorHandling) (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 总览 这篇文档描述了如何在你的Model和控制器代码中抛出OAF 框架异常. 内容 l  异常类型 l  异常类 l  批量异常 l  异常示例 l  对话框页和消息对话框 异常类型 OAF框架处理三种基本类型的异常:常规(general),验证(

WinForm开发中屏蔽WebBrowser脚本错误提示的方法

通常在C#的实际开发过程中,会发现设置其属性ScriptErrorsSuppressed无法达到屏蔽脚本错误效果,但是可以通过下面两种方式实现这一效果. 1.在DocumentCompleted事件中订阅Error处理 ,代码如下所示: private void wbGoogleMap_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { wbGoogleMap.Document.Window.Err

Winform开发中的窗体重复及灵活切换问题

Winform开发中的窗体重复及灵活显示问题 1.问题引入 在项目中需要实现主窗体点击按钮后打开子窗体,但是如果不限制的话每次点击都会打开一个新窗体,用户体验不好还浪费内存.所以这里要做的是限制每个子窗体只可以打开一次,如果打开后没有关闭子窗体或者子窗体被最小化了,就直接把已打开的窗体激活并置顶显示.同时还要满足不同的子窗体是可以共存的,也就是只能同时有一个子窗体A,子窗体B,子窗体C--但是子窗体ABC之间是可以同时存在并互相切换的. 2.解决思路 这里我的做法是写两个方法:ShowOpenF

android开发中R文件丢失

R文件在android开发中,占据着中会在重要的地位,里面的内容有系统自动生成,不可随意修改,然而在开发过程中,总是不可知的丢失,这里总结一下修补方法 #.在Eclipse里可以 (1).在不能确认xml文件或图片文件没有错误的情况下,最好不要clear,因为这时只要一clear,那么R文件就会没了,而在众多的xml文件里面找出错误确实不是一件容易的事. (2).如果R文件已经丢失,可以 右键项目-->Android Tools--> fix project properties, (3).检

git 从版本控制中删除文件及.gitignore的用法

刚开始用git的时候,喜欢用git add *把所有文件都加入到版本管理中. 后来发现,因为我在virtualenv下面创建的内容,在跑测试的时候,会产生__pycache__文件夹,里面的很多东西都不需要纳入版本管理中,于是就想把它删掉. 一般来说,用的是git rm命令,比如 git rm -r __pycache__ 但是它会直接删掉硬盘上的文件,我们可以加上-n参数查看他会删掉哪些文件. (.venv) [[email protected] SocialMatrix]# git rm -