程序是这么设计的:
1、首先用OpenFileDialog打开文件夹下的所有文件(图片类型)
2、根据打开的路径,遍历所有文件,存储到List<string>集合。
3、List<string>集合作为ListBox的数据源,显示文件列表
4、点击显示列表中文件路径,右边picBox显示图片,并读取图片中的条码。
5、把列表中的所有文件,copy到另外一个文件,原文件名用条码内容替换。
6、最后,删除原文件夹(OpenFileDialog打开文件夹)下所有图片文件.
1-5都实现了,就是最后一步(6),文件名copy且替换后,用File.Delete删除文件时,总提示原文件被占用。
百度了好多,都是千篇一律文件流的方法,using 、disPose了OpenFileDialog和picBOX,还是一样错误。
最后,下载的handle工具,检查占用的程序,居然是主程序名,想不明白,一kill了它,整个程序都干掉了。
各位大神支支招!
有关文件的4个地方:
1、openfiledialog :打开后,有用dispose了,不知道还有其它关闭方法?
2、ListBox:只是获取字符集,应该没关系
3、File.Copy:复制文件,这个不清楚
4、PicBox:确认己经关闭了
试试先 Dispose OpenFileDialog ,然后删除文件
有用,但是还报错
if(ofd.ShowDialog()==DialogResult.OK)
{
ImgDir.Text = ofd.FileName.Substring(0, ofd.FileName.Length - ofd.FileName.Substring(ofd.FileName.LastIndexOf("\\")).Length);
List<string> caeList = new List<string>();
GetFileNames(ImgDir.Text.Trim(), caeList);
//listbox得到文件路径后,释放打开的文件资源,否则之后无法删除原文件
caeList.Clear();
}
ofd.Dispose();
@Luckyfish小文: 试试 File.Move
可能是读取图片文件问题,打开的图片文件没有释放。具体要看你读取图片文件代码是怎么写的了,如果你用到了Image.FromFile,那十有八九问题就出在这里。
不是用formfile
后面改用文件流,还是一样,代码如下:
FileStream fs = new FileStream(url, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
MemoryStream ms = new MemoryStream(bytes);
Bitmap img = new Bitmap(ms);
pictureBox1.Image = img;
@Luckyfish小文: 这样读取图片也是没问题的
这明显就是文件打开没关闭的,请参考 《C# 入门》第三章第四节,文件操作。
是指哪一块打开没关闭呢,openfiledialog还是 ,picbox显示的?
基本没过关,不好意思
建议提供一下“遍历所有文件”与“copy到另外一个文件”的相关代码
– dudu 6年前@dudu: 遍历所有文件string[] subFiles = Directory.GetFiles(pathname);
– Luckyfish小文 6年前foreach (string subFile in subFiles)
{
fileList.Add(subFile);
}
listBox1.DataSource = fileList;
@dudu: 复制,直接用的File.Copy(原文件,新文件);
– Luckyfish小文 6年前