C#中listview加载的图片,批量删除时出现异常“文件被另一个程序使用”,具体代码如下

自动加载图片:
private void FrmPicListView_Load(object sender, EventArgs e)
{
listView1.View = View.LargeIcon;
listView1.MultiSelect = true;
string[] files = GetImages();
if (files != null)
{
ImageList list = GetImage(files);
listView1.Tag = files;
if (listView1.LargeImageList == null)
{
listView1.LargeImageList = new ImageList();
listView1.LargeImageList.ImageSize = new Size(60, 80);
}
for (int i = 0; i < list.Images.Count; i++)
{
listView1.LargeImageList.Images.Add(list.Images.Keys[i], list.Images[i]);
list.Images[i].Dispose();
listView1.Tag = files[i];
}

            int count = listView1.Items.Count;
            if (files.Length == list.Images.Count)
            {
                for (int i = count; i < count + files.Length; i++)
                {
                    int index = i - count;
                    FileInfo info = new FileInfo(files[index]);

                    if (!listView1.Items.ContainsKey(files[index]))
                    {
                        listView1.Items.Add(files[index], info.Name, i);
                    }
                    else
                    {
                        MessageBox.Show("已存在此图片:" + files[index] + ",不能重复添加!");
                    }
                }
            }
        }
    }

    private ImageList GetImage(string[] files)
    {
        ImageList list = new ImageList();
        for (int i = 0; i < files.Length; i++)
        {
            Image image = Image.FromFile(files[i]);
            list.Images.Add(files[i], Image.FromFile(files[i]));
            list.ImageSize = new Size(60, 80);
        }
        return list;
    }
private int NumOfFiles;
    private string[] imgName;
    private string[] imgExtension;
    private string[] GetImages()
    {
        FileInfo FInfo;
        imgName = Directory.GetFiles(Application.StartupPath + @"\FlashPath\asset\photos");
        NumOfFiles = imgName.Length;
        imgExtension = new string[NumOfFiles];
        for (int i = 0; i < NumOfFiles; i++)
        {
            FInfo = new FileInfo(imgName[i]);
            imgExtension[i] = FInfo.Extension;
        }
        return imgName;
    }

批量删除代码:
private void butDelete_Click(object sender, EventArgs e)
{

        try
        {
            if (this.listView1.CheckedItems.Count > 0)
            {
                for (int i = 0; i < listView1.CheckedItems.Count;i++ )
                {
                    if (listView1.CheckedItems[i].Checked)
                    {
                        listView1.Items.Remove(listView1.CheckedItems[i]);
                        PathName = listView1.CheckedItems[i].Name;
                        File.Delete(PathName);
                    }
                }
            }
            else
            {
                MessageBox.Show("请先选择要删除的图片!", "信息提示");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("批量删除失败:" + ex.Message);
        }
    }
}

3个回答

读取图片后未释放stream。

文件被占用,读取之后记得关闭流

先检查下是程序自身占用了文件还是外部程序占用了文件,如果是自身,看看读取文件后有没有及时关闭。

lv139
lv139 我是在一个winform界面中的listvie里先列表加载显示图片,然后通过点击删除按钮对图片进行删除操作,请问如何在加载图片完成以后进行关闭?
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ListView图片查看小程序(用listview显示某个文件夹中图片为缩略图,picturebox显示大图)
这个问题是在百度上看到的: 为了解决这个问题看了花了大半天的时间啊,毕竟对ListView的一些基本操作不熟悉,做这个算是第一次近距离观察ListView了。 解决方案不一定很完美,但是我是花了一番心思的,折腾了好半天才弄正常,仅仅是对ListView的摸索、学习。 下面的代码中会有一些问题,比如文件的存在没有判断、一些小细节忽略了。有些注释是在写博客的时候添加的,可能格式不是很好。
listview中glide加载网络图片跳跃问题
当界面上滑快要接触到imageview的底部时 触发glide加载图片 加载完成时就会被拉到图片的顶端的问题。 第一次写博客 可能表达的都会很奇怪吧,记录一下这个遇到的问题。 百度找了一些方法 设置tag什么的 无果。想起来这是因为加载图片时,imageview的高度是warp_content,所以加载完成后会改变位置,所以就干脆让他不要复用,这样就不会一直加载了。挺蠢的一个方法,很暴力。
在删除文件的时候提示文件被其他进程占用的解决办法
在我们删除一个文件,或者说给一个文件重命名的时候,经常会删除不了,提示说这个文件被另外一个进程占用着。那么到底是哪个进程占用了呢?这里我们有解决办法。   打开资源管理器,切换到Performance,然后单击ResourceMonitor。 这时候会弹出一个新的窗口。在这个窗口中,切换到CPU下边的Associated Handlers这个区域,会看到这里有一个搜索
C# 用ListView控件多个选中并进行删除
private void button1_Click(object sender, EventArgs e)        {            listView2.MultiSelect = true;            foreach (ListViewItem var in listView2.Items)            {                if (var.Se
C# httplistener 提示文件被占用
今天把程序拷给zz的时候,结果程序一直异常结束,后来调试发现是httplisten的问题,抛出httplistenerException的异常,catch了一下,发现提示是The process cannot access the file because it is being used by another process.网上搜了下,发现是端口占用的问题。这个提示可真是够坑爹的,怎么就成
C# 文件正由另一进程使用,该进程无法访问该文件
C#中经常会使用到OpenFileDialog控件,而使用该控件时若没有将条件设置好,很容易出现以下提示: “文件正由另一进程使用,该进程无法访问该文件”。 打开一个文件后,尝试重新打开一次该文件,或者打开该文件后想对该文件进行其他操作的时候,就容易出现这个错误提示,错误的原因很简单,解决方法也很简单。 一般情况下造成该错误的原因是构造System.IO.FileStream时参数设
使用VS2010编写C#程序时总是提示正由另一进程使用,因此该进程无法访问此文件的解决办法
解决办法: 1.因为这种情况并不是每次都出现,所以。假设项目名是test1。 先把VS关掉,然后把test1-->bin-->debug-->test1.exe强制删除。那么下次打开的时候,就可以了。因为debug下的test1.exe 每次都会重新生成。 2. 选择 调试--->终止调试即可。 3.尽量少用或者不用hide()方法,并且运行时
C# 中使用Image.FromFile(string path)后,提示该文件正在被另一进程使用XXX的问题
C# 中使用Image.FromFile(string path)后,提示该文件正在被另一进程使用XXX的问题
Android学习--实现listview批量删除的功能
继放下了上次的项目两个月之后,领导又有了新的需求,她发现要删除已经到期的倒数日太多,又不能批量删除。所以我就想做一个跟微信一样的,长按弹出菜单,直接删除当前的,或者是多选删除。 这就需要用到checkbox。 首先是修改xml文件。直接在list-item的文字前面加checkbox即可<Checkbox android:id="delete_cb" android:width=
利用ListView批量删除item
本次代码是利用ListView+CheckBox批量删除item 利用CheckBox选中一个或多个item,最后批量删除它们。  程序运行效果图如下: 下面开始上码: (代码已更正,已解决滚动时紊乱的问题) package com.test.adapter; import java.util.ArrayList; import java.util.HashMap
删除图片时,报错“正由另一进程使用,因此该进程无法访问此文件”的处理方式
在做一个小项目时练习的时候,当我单击删除按钮删除图片时,却发生了异常,如下图: 在网上搜索半天,可就是没找到解决方法,终于,经过我的不懈努力,在谷歌里面搜到了。原来,在PictureBox里面显示图片的的这一事件占据了程序的一个进程,当要删除这张图片的时候,这个进程仍然在执行中。就算让PictureBox先显示下一张图片,然后再删除也不行。因为要删除的那张图片被占用了,无法删除!面对这样的情况,
C#关闭word时,提示“此文件正由另一个应用程序或用户使用” normal.dot
C#关闭word时,提示“此文件正由另一个应用程序或用户使用” normal.dot 作者: Ss_Andy  时间: 2010-09-25 出处:http://www.cnblogs.com/Ss_Andy/archive/2010/09/25/1834386.html 本文欢迎转载,但必须在文章显眼处保留原文地址 http://www.cnblogs.com/S
批量删除一个文件夹中与另一个文件夹名称相同的图片
删除一个文件夹中与另一个文件夹名称相同的图片,可用于机器学习或者深度学习前,图像素材的准备阶段,批量删除图片,节省时间。
c#读取数据库中图片路径,将图片保存到imagelist,在listview显示
1,在winform界面,拖入listview,然后加入一个imagelist。 2,我们要做的就是根据数据库中存储的图片路径,把图片存储到imagelist,然后再listview中显示图片,和数据库中其他的一些内容。 代码如下: private void coldDish_Load(object sender, EventArgs e) { string sql = s
解决文件正被另一个程序使用而无法删除问题的小程序
解决文件正被另一个程序使用而无法删除问题的小程序
如何选中其他程序ListView控件中的某个Item
一:程序说明: 题目是一位网友在我留言板上的留言,不知道大家看没看过我曾经写过的《如何向其他程序的ListView控件发送LVM_GETITEMTEXT消息》一文?在那篇拙文中,我的目的是得到某一Item的TEXT。于是我将LVITEM结构插入到了目标进程中,才使得目标进程正确响应LVM_GETITEMTEXT消息。 要得到某一Item的TEXT,需要发送LVM_GETITEMTEXT
C# 在编译之后,出现正由另一进程使用,因此该进程无法访问此文件
出现的原因: 1.调用了窗口的 hide() 方法,导致某些窗口(尤其是登录页面)被隐藏,导致关闭的时候,这个进程在最下面的任务栏里面并不显示出来,而且在任务管理器里面也不显示。(但实际上是进程存在并且没有被关闭,只是隐藏起来了),结果这样就莫名进入了调试状态。 2.自己采用的调试状态运行程序,导致不能修改代码,尽管调试状态下可以修改代码(工具--->选项--->调试,把对号去
在ListView中使用ImageLoader加载图片时出现闪烁问题
真正的闪烁原因不是display和imageload方法的缘故,而是在设置option时,设置了.displayer(new FadeInBitmapDisplayer(200))的缘故,直接设置为.displayer(new SimpleBitmapDisplayer()),然后再getview方法中调用display方法,就不会闪烁了. 解决方案出自以下链接:点击打开链接
C# 文件正由另一进程使用解决方案(流共享方式与锁方式)
其主要触发的原因,文件正在被读写时,读写时间过大没有来得及关闭读写流,这时另一程序进行访问,文件被前一个程序独占 1.将文件流变为共享: FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); StreamReader sr = new StreamReader(
C#中使用Assembly.LoadFile()加载程序集的抛异常的问题
程序集model.dllusing System;namespace model { public class Student { public string sno { get; set; } public int majorid { get; set; } public string sex { get; set; }
ListView+CheckBox,实现批量删除与解决listview滚动checkBox选择状态絮乱
这个项目是Android studio的,eclipse的朋友可以复制一下资源就能用了。 知识点如下: 1、解决listView滚动时checkBox的选择状态会发生变化(絮乱); 2、ListView的Item长按,点击时间并存,实现同一UI控件多需求响应各类事件; 3、点击ListViewItem选中响应Item里的CheckBox; 4、计算选中的项数以及相应UI的隐显增强用户体验; 5、自定义AlertDialog布局。全部自己研究编写,测试运行Ok,为真实项目的所用的简化Demo。
对文件操作(复制/移动/删除)时 报“文件正由另一进程使用,因此该进程无法访问此文件”的解决办法
在对刚刚使用System.IO.File.Create(Path)静态方法创建文件后,立即对它进行复制/移动/删除)时(包括删除此文件所在的整个目录操作System.IO.Directory.Delete(path_updateDir, true)),会报“正由另一进程使用,因此该进程无法访问此文件”的异常错误。 这是由于:System.IO.File.Create(Path)静态方法在创建文件
如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?
一、原因是 VS.NET 2003 的一个 Bug, 详细情况请参阅 http://support.microsoft.com/default.aspx?scid=kb;zh-cn;313512 编译时候不要把程序集创建到一个目录下,分别创建在各自目录,然后用编译后事件把文件拷到一起 ASP.NET 也可能出现,此外他还有另外一个原因 比如:http://support.microsoft.com
Android Universal Image Loader加载 ListView 滑动过程中图片显示重复错位闪烁问题
项目使用uil加载listview图片时,出现过一次头像加载错了的问题, 之后在一篇博客上看到一种解决方案,可以借鉴 http://www.trinea.cn/android/android-listview-display-error-image-when-scroll/ 另外还尝试了另外一种方法,就是随便写一个图片地址,好像也可以,没有具体的去测试,欢迎拍砖
如何用StreamReader打开被其他进程占用的文件
用StreamReader打开被其他进程占用的文件时,会收到The process cannot access the file 'xxxxx' because it is being used by another process.的错误信息。 采用下面的方式可以解决这个问题: using(FileStream fs = new FileStream(@"xxx", FileMode.Ope
文件“bin\Debug\IDAL.dll” ,正由另一进程使用
前言  小编在进行C#语言编写的程序中,遇到了一个小问题,这个问题是由于.dll文件产生的,之前遇到这种问题之间清理解决方案、重新生成解决方案就可以解决,但是这一次却失灵了,究竟是哪出了问题呢?什么是.dll文件  这是一个编译代码出现的文件,具体的术语解释出自百科:  DLL(Dynamic Link Library)文件为动态链接文件,又称为“应用程序拓展”,是软件文件类型。一个应用程序并不是...
Glide--在listview中加载高度不固定图片,加载刷新图片跳动解决
Glide--在listview中加载高度不固定图片,加载刷新图片跳动 项目中用了Glide来显示高度不固定的图片,加载更多调用notifyDataSetChanged这个方法时候,图片已加载过得会闪烁一下, 但是又测试了,Glide显示高度固定的图片时候,加载更多不会出现闪烁,但是问题来了,为啥高度不固定的时候会闪烁呢,应该跟图片高度不同有关,在更新listview时候,会去重新
C# 系统应用之TreeView控件显示树状磁盘路径并在ListView显示文件
资源主要是结合博客文章:http://blog.csdn.net/eastmount/article/details/21241313主要讲述使用C# winForm实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录,并点击结点文件夹能在右边的ListView中显示文件夹中所有文件信息(名称、大小、类型).希望对大家有所帮组.采用VS2012开发,VS2012一下可能会运行出错.代码含详细注释.
C# 删除或修改文件时提示文件被占用
1, 问题:C# 中使用Image.FromFile(string path)后,提示该文件正在被另一进程使用XXX的问题,是因为对应的文件在一直调用 ,其生成的Image对象被Disponse()前都不会被解除锁定,这就造成了此问题,就是在这个图形被解锁前无法对图像进行操作(比如删除,修改等操作)。解决方案:此问题可以使用下面三个方法解决问题. 方法1:在要进行文件操作前将Image对象销毁.S...
【安卓】使用多线程实现ListView中图片的异步加载
ListView中图片的加载问题十分突出,因为程序读取图片资源十分耗时,而如果把设置图片放到主线程中的话,在下滑时会感觉到明显的卡顿,用户体验非常之差。 于是我想到设置图片这一步肯定不能不再主线程中进行。必须使用异步加载图片来实现。
使用glide图片加载框架将网络图片展示并在listview中
在实际项目中,经常有需要将服务器端返回的图片的url地址显示在listview中的情况,如果我们自己去实现的话,大致思路是:1、创建JavaBean2、创建adapter3、创建http请求类4、在活动中对http返回的消息进行解析5、获取到图片的url时开启一个线程来再开启一次网络来下次图片并存放再bitmap中6、在adapter中使用image.setImageBitmap的方法将活动中的b
C#程序Debug文件夹可以运行,无法调试
C#程序Debug文件夹可运行,无法调试。 百思不得其解。 和用C#多年的同事沟通,怀疑:C#没装好,C#可以正确编译。 完全安装VS2013,就好了。
C# winform imageList控件加载图像失真问题的解决办法
问题成因: 在设置控件属性时,先设置了Images属性,后设置了ColorDepth属性,造成了加载进来的图片都是8bit的。 解决方案: 先清除刚才Images里加载的图片,然后先设置ColorDepth属性为32bit的,然后再设置Images属性。
C#如何获取其他程序ListView控件中的内容 含源码
需求:获取其他程序中的ListView控件的文本内容 原理:进程之间是相互隔离的,数据是不能共享的(有些特例)    LVM_GETTITEMTEXT:将一个数据缓冲区提供给listview32控件,你不能把你的进程的数据缓冲提供给另外的程序,所以要用openprocess 打开“任务管理器”进程, 然后     在“任务管理器进程”中申请足够长度的内存(VirualAllocEx),将这个内
C#在ListView中Subitem显示图片
这个程序实现了如何在ListView的列中显示图标或者图片,可以用于显示不同Item的状态。
使用glide 时候在listview 或者 grideview 中图片自动拉伸问题
这篇文章是我转载别人的。 不过原地址我忘记了 只记得解决问题的方法了~      我要加载图片的地方是轮播图, 轮播图中已加入动画效果,用glide 加载图片时候 因为glide 加载图片有一个淡入淡出的动画效果 两个效果貌似有冲突 出现了图片拉伸问题   解决方法: RequestManager manager = Glide.with(mContext); Drawabl
ListView加载图片的错位解决方案(二)
Android ListView异步加载图片乱序问题,原因分析及解决方案 标签: AndroidListViewfindViewWIthTag弱引用NetworkImageView   版权声明:本文出自郭霖的博客,转载必须注明出处。 目录(?)[+] 转载请注明出处:http://blog.csdn.net/guolin_blog/a
使用c#检测文件正在被那个进程占用
要检测文件被那个进程占用,需要使用微软提供的工具Handle.exe,这里有微软提供的下载我们可以在c#中调用Handle.exe 来检测到底哪个进程占用了文件string fileName = @"c:\aaa.doc";//要检查被那个进程占用的文件 Process tool = new Process(); tool.StartInfo.FileName = "handle.exe";
[代码问题解决录A1]c#Listview控件动态添加数据并阻止重复添加
昨天,我就Listview控件中数据添加时出现了一些问题,具体问题记载详情看这篇博文:http://blog.csdn.net/oversea_zone/article/details/59112700 昨天我一直尝试在解决这个问题,但无果,在朋友的提醒下,我得到了一个新思路,那就是:存储传进来的项Lv可能存有多个值,也就是说:程序将我前几次点击的值一一存储进了Lv这个ListviewI
删除文件时,提示文件已在另一个程序中打开而导致文件无法删除,怎么办
今天下载的一个文件恢复软件工具,之后不好用想删掉就出现上面情况,怎么删啊,删除时候就提示“文件已经在另一个程序中打开”,有图,系统win7, 由于文件正在打开着,所以无法删除,解决办法如下: 1:关闭打开该文件的程序,如果不知道该程序被谁占用,可以通过任务管理器-->"性能选项卡"-->资源临视器中搜索相关文件名找到,搜索见下图第二个椭圆:
Android优化:ListView嵌套GridView滑动时不加载图片,停止后加载图片
Android优化:ListView嵌套GridView滑动时不加载图片,停止后加载图片
C# 系统应用之ListView控件 (二).加载选中节点文件夹下文件信息
在项目中的前面一篇文章"C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标"中我讲述了如何使用TreeView控件树状实现显示"我的电脑"所有磁盘路径下的文件夹,并加载图标如下图所示,此篇文章我需要讲述的是当鼠标点击左边的TreeView控件中的文件夹时,如何实现在右边的ListView控件中显示相应的文件,并显示文件的名称、大小、类型属性.主要运用的知识是如何实现ListView显示信息,Subitems()函数增加子项,如何设置列表头等信息.希望该文章对大家有所帮助.代码:pr
ListView的异步加载(笔记,多线程和AsyncTask)
异步加载最常用的两种方式: 多线程,线程池     AsyncTask 实例操作: 从一个网站上获取Json数据,然后将数据在ListView上显示。 1.创建item_layout布局 , 修改主界面布局 item_layout.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi
Android中通过Picasso来加载网络图片,并通过ListView显示出来。
在使用之前需要将Picasso的jar包导入。 MainActivity代码: import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.vi
ListView用Glide加载图片notifyDataSetChanged时图片闪动
最近出现的问题: ListView用Glide加载图片notifyDataSetChanged时图片闪动 两种解决方案, 第一种:在适配器中固定图片宽高,不会闪烁 但如果不想固定图片宽高就可以采用第二种方案,即设置tag  第二种: ComGoods comGoods = data.get(position); if(!comGoods.getImg().equals(hold
.net 中的ListView在SubItem中添加图片的一个方法
    下面是实现的部分代码: public partial class Form1 : Form    {        //在Windwos XP下        //窗体上包含一个按钮,一个ListView,ListView中有三列,Detail模式,        public Form1()        {            InitializeCompon
安卓学习之使用listview设置adapter时,解决动态显示图片的问题
安卓学习之使用listview设置adapter时,解决动态显示图片的问题
Windows7中出现“文件正在被另一个人或程序使用”
转自:http://www.downcc.com/tech/info/3111809.html 在Win7中,我们也经常遇到无法删除文件的情况,很多时候系统都会提示“文件正在被另一个人或程序使用”,这是由于某个后台进程正在调用该文件,此时只有结束该进程才可实现删除。那如何定位该进程呢?其实,在Win7中利用其“资源监视器”可轻松定位程序进程,进而便捷地删除被占用文件。   下面我们
C# listview通过绑定imagelist来添加图片
1.先通过工具栏拖进来一个imageList控件 "imageList1"; 2.向listview中添加图片项: public void ArrayImage(string[] ImagePath) { this.listView1.Items.Clear(); this.imageList1.Images.Clear();
ListView快速滑动时不加载图片
找了一些文章,感觉还是这种办法比较好 判断listview是在滑动状态,给adater发送这个状态,adapter可以判断加载不加载图片 可以在adapter写一个set方法,在activity调用方法传值。public void onScrcllStateChanged(AbsListView view, int scrollState){ if(scrollState == Ab
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问