程序仍占用USB,以至于USB不能正常结束

Luna100 2009-06-17 10:27:13
现在遇到一个麻烦的事,下面一段代码,实现如下功能。
在按钮按下后,弹出一个文件保存的对话框, 此时选择保存地为USB设备,点击确定后,
文件能正常保存,可是在程序不退出的情况下,USB不能结束,
查看发现,程序还在占用USB,不知道怎么解决,望大虾帮忙。

类似的现象,比如说,我们用MSN传USB上的文件给对方,当停留在USB上选择文件的画面时,USB被占用,这是正常的。
而且是被Explore.exe和MSN两个程序占用,可是当文件选好确定后,随着对话框的关闭,Explore.exe和MSN同时释放占用的USB。
我就想做到这种效果。可是我测试时发现,在文件保存对话框上点取消的话,没问题,程序不会占用USB,
可是一点确定的话,Explore可以正常结束,不在占用USB,可是程序还在占用,就像下面这段很简单的代码就是这种想象,
把断点设在If判断哪一行,F10一下,弹出文件保存对话框,确定后,USB设备就不能正常结束,说明程序还在使用。

“WhoLockMe”有这么一个软件,右键点击USB那个盘符,就能查看时那个程序在使用USB盘。要是没有任何对话框弹出,
就说明没有程序用,此时可以结束USB。

有兴趣的朋友,可以上网找下我说的这个软件,要是没找到,留下你的mail,我会发给你。

急啊!!!

private void button1_Click(object sender, EventArgs e)
{
System.Windows.Forms.SaveFileDialog saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
saveFileDialog1.Filter = "csv(*.csv)|*.csv";
saveFileDialog1.Title = "文件保存";
saveFileDialog1.AddExtension = true;
if (saveFileDialog1.ShowDialog() != System.Windows.Forms.DialogResult.OK)
{
}
else
{

}
}
...全文
706 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Luna100 2009-06-22
  • 打赏
  • 举报
回复
不好意思,忘了13楼的兄弟了,
帖子结了,下次一定给你补上。
Luna100 2009-06-22
  • 打赏
  • 举报
回复
OK,

10楼,11楼的答案都对,在此谢过了。
11楼用的那个属性,我也关注过,只是没太理解那个属性和这次障碍的关系,
就没试下。手懒了!!!!

多谢二位帮忙,尤其是10楼。

K1933 2009-06-21
  • 打赏
  • 举报
回复
要将当前目录移动到别的硬盘上!
qldsrx 2009-06-20
  • 打赏
  • 举报
回复
答案出来了,你在所有处理结束后,调用这个即可:

System.Environment.CurrentDirectory = Application.StartupPath;

那个U盘是被你的当前进程给占用了。
AhBian 2009-06-20
  • 打赏
  • 举报
回复
还有所打开的文件流,用完后应该要及时关闭。
AhBian 2009-06-20
  • 打赏
  • 举报
回复

saveFileDialog1.Title = "文件保存";
saveFileDialog1.AddExtension = true;

saveFileDialog1.RestoreDirectory = true ;

if (saveFileDialog1.ShowDialog() != System.Windows.Forms.DialogResult.OK)
{
}
else
{

}
Luna100 2009-06-19
  • 打赏
  • 举报
回复
谢了,等待好消息!
现在就是有点搞不懂,程序到底占用USB什么东西了,为什么不释放?
qldsrx 2009-06-19
  • 打赏
  • 举报
回复
这个不好试啊,手头没有U盘,在家里了。

不用U盘那个停止的功能,一般直接拔出就可以,如果是目录,也没有被占用,所以也可以直接删除,得在真实环境下才看得出来,等吧,我回家后拿U盘测测。
Luna100 2009-06-19
  • 打赏
  • 举报
回复
等了一天又一天,等到花儿都谢了,go on……
qldsrx 2009-06-18
  • 打赏
  • 举报
回复
看你一楼给的代码中,按下保存按钮后,你没有任何动作。但你有说文件可以正常保存,我想知道那个保存的方法是不是被你给删除了,如果是的话,问题就是你保存时没有释放打开的文件流了。(这都不贴全,有什么好保密的)
Luna100 2009-06-18
  • 打赏
  • 举报
回复
楼上的误会了,
就是一段代码而已,没啥好保密的。

我刚开始也以为是文件处理时,有什么资源没被释放引起的,
但我测试发现,即使我什么都不处理,只要在保存对话框上,
输入想保存的文件名后,确定返回,什么处理都不做,
USB就被程序占用,不能结束。而且,这个时候只是程序一个在用USB,
之前打开保存对话框时,还有Explore在占用,随着对话框关闭,也就不再占用了。
在button1_Click这个方法结束后,程序还是正常运行,就是还占有USB,以至于不能正常结束。

如果在保存对话框上选择取消按钮返回,就没有这事。
要不,大家可以自己随便建个工程,就放个按钮,把我上面的代码粘过去,
测试一下,就有这事。就是对这种现象我挺不理解的,想上来听明白人讲解下。
对于其他的代码,与这个障碍没啥关系。我也是为了尽量不把问题弄得太复杂,所以没贴多余的代码。
Luna100 2009-06-17
  • 打赏
  • 举报
回复
回1楼:
为了解决问题,才发现那个软件的。
你说的好像不是那么回事,我定义都是局部变量,方法执行完就应该释放,即使我强制GC回收也一样有问题存在。
我试验了,也的确不好用。

回2楼:
你说的那个方法我也试了,同样不好用。
qldsrx 2009-06-17
  • 打赏
  • 举报
回复
要是不行就用saveFileDialog1.Reset()重置为其默认值
qldsrx 2009-06-17
  • 打赏
  • 举报
回复
楼主是来介绍软件的还是提问的?

提问的话,你只要重置saveFileDialog1.FileName属性,你的那个FileName属性还指向你的USB目录下那个创建的文件,saveFileDialog1对象还在就不会释放。
Luna100 2009-06-17
  • 打赏
  • 举报
回复
怎么一下午都没大虾上来说两句阿?

帮帮忙啊。痛苦中!··~~

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧