作者angelfox (狐狸)
看板C_Sharp
标题[问题] 档案复制问题
时间Wed Apr 14 16:54:54 2010
我写了一个程式 用来做产品的销售管理
问题发生在编辑产品资讯的部份
我的想法是这样
让使用者选择产品的图片 然後先复制一份该图片到指定资料夹
再呼叫复制的该图片去做显示
以下为部份程式码:
//**************************************************************
private string copyGraphics(string filePath, string directory)
{
string destiFilePath = Path.Combine(directory, Path.GetFileName(filePath));
if (Path.GetFullPath(destiFilePath) == filePath)
return filePath;
else
{
File.Copy(filePath, destiFilePath, true);
return destiFilePath;
}
}
//**************************************************************
问题发生在File.Copy()的部份
假设我先选择了一张图片A 再改成选择图片B (A B都在指定资料夹外)
也就是先File.Copy(A, ..., ...) 再File.Copy(B, ..., ...)
这时如果我再选择图片A,也就是会再执行File.Copy(A, ..., ...)的时候
就会出现IOException
由於另一个处理序正在使用档案 '.\..\..\data\pics\Jay.jpg',所以无法存取该档案。
这部份我试了很久都找不到解决办法
麻烦各位高手指点一下
感激!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.44.27
1F:→ scottzz:此时目的端的图片A是否已经在显示,所以要再copy过去会Erro 04/14 17:21
2F:→ angelfox:回楼上 应该不是 因为再次File.Copy(A)时,正在显示的是B 04/14 17:39
sorry 经过我继续测试的结果 一楼的怀疑应该是对的
但是我还是不知道错在何处 只好放上更多程式码
if (fileOpen.ShowDialog() == DialogResult.OK)
{
//copy the picture to the specified directory
string picPath = copyGraphics(fileOpen.FileName,
fileOpen.InitialDirectory);
//update system model
updateModelWhenPicChanged(PdtStorage.Products
[LBox_products_high.SelectedIndex], picPath);
pdtChanged = true;
//update visual
updateVisualWhenPicChanged(picBox_high,
PdtStorage.Products
[LBox_products_high.SelectedIndex]);
}
//**************************************************************
private void updateVisualWhenPicChanged(PictureBox picBox, product pdt)
{
picBox.Image = null;
picBox.Image = Image.FromFile(pdt.PicturePath);
}
//**************************************************************
如果把updateVisualWhenPicChanged()注解掉就没有前述的问题了
所以问题应该是发生在这
但是这我就不懂了
为什麽做前述操作(A-B-A)的时候
指定资料夹的图片会在使用中呢?
困扰阿~
※ 编辑: angelfox 来自: 140.112.44.27 (04/14 18:35)
3F:推 conanist:在显示的过程中 不要让使用者点图片 04/14 18:29
4F:→ conanist:IO也是要花成本的 04/14 18:30
※ 编辑: angelfox 来自: 140.112.44.27 (04/14 18:46)
5F:→ scottzz:MSDN:Image.FromFile 档案会保持锁定,直到已处置 Image 04/14 22:15
6F:→ scottzz:Image != null时 ,先picBox.Image.Dispose(); 看看 04/14 22:21
7F:→ angelfox:原来如此 我以为picBox.Image = null就行 原来要dispose 04/15 10:20
8F:→ angelfox:问题已解决了 太感谢各位!! 04/15 10:20