关于删除、复制文件碰到的问题,大家请指教。

net_boy 2009-03-09 02:18:29
1、操作系统Xp professional sp3 英文版
开发环境 VS 2008 sp1 英文版

开发C/S程序

2、下面是删除文件的函数:
/// <summary>
/// Remove file
/// </summary>
/// <param name="fileName">file name</param>
/// <returns>success return true, fail return false</returns>
public static bool RemoveFile(string fileName)
{
try
{
if (File.Exists(fileName) && SetFileAttribute(fileName, FileAttributes.Normal))
{
//FileInfo file = new FileInfo(fileName);
//file.Open(FileMode.Truncate);
//file.Delete();
//file = null;
File.Delete(fileName);
}
else
return false;
}
catch(IOException ex)
{
_log.Error("RemoveFile Error. FileName<" + fileName + ">");
_log.Error(ex.Message, ex);
return false;
}
return true;
}

3、设置文件属性的函数:
public static bool SetFileAttribute(string fileName, FileAttributes at)
{
try
{

if(File.GetAttributes(fileName) != at)
File.SetAttributes(fileName, at);


}
catch (Exception ex)
{
_log.Error("Set FileAttribute Error. FileName<" + fileName + ">");
_log.Error(ex.Message, ex);
return false;
}
return true;
}

4、页面里面的代码:
通过对话框选择文件,然后将文件复制到另外一个目录下,复制之前,删除原来的文件,然后显示,多次操作有,发现一个现象,
if (File.Exists(path))
IOHelper.RemoveFile(path);

上面2行代码执行后,发现文件没有删除成功,旧文件还在目标目录下存在,
if(File.Exists(path))
File.Copy(file, path, true);
执行到上面2行代码,就会弹出错误信息:file is denied.

然后退出程序,发现目标目录下,旧文件自己消失了,这是为什么呢?你们碰到做这样的问题么。

可能我描述的还不够详细,有不清楚的回帖我们讨论。


...全文
186 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
net_boy 2009-03-11
  • 打赏
  • 举报
回复
不行,删除旧文件时,提示文件访问拒绝,也就是说该文件目前被其他进程用着,能否,根据当前的文件,取得调用它的进程,然后销毁进程呢?
flybird811 2009-03-11
  • 打赏
  • 举报
回复
直接复制,如果有同名文件,就会自动覆盖的,但要选择覆盖的功能
net_boy 2009-03-11
  • 打赏
  • 举报
回复
zerozhoutong 2009-03-10
  • 打赏
  • 举报
回复
文件的删除应该要先把打开的文件的关闭,然后才能执行操作吧,你看下有没有
file。close();这样类似的函数
zerozhoutong 2009-03-10
  • 打赏
  • 举报
回复
文件的删除应该要先把打开的文件的关闭,然后才能执行操作吧,你看下有没有
file。close();这样类似的函数
net_boy 2009-03-10
  • 打赏
  • 举报
回复
删除目标文件,然后将源文件复制过去。
net_boy 2009-03-10
  • 打赏
  • 举报
回复
删除目标文件,然后将源文件复制过去。
net_boy 2009-03-10
  • 打赏
  • 举报
回复
cja03 2009-03-10
  • 打赏
  • 举报
回复
通过对话框选择文件,然后将文件复制到另外一个目录下,复制之前,删除原来的文件
-------------------------------------------------------------------
复制之前把文件删了?那怎么复制啊???没看明白。
oyljerry 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 net_boy 的回复:]
不是因为这个原因,好像是那个文件禁止访问,

我再次删除,就报错,然后关闭程序,发现删除出错的那个文件还消失了。

难道我上次删除,复制的时候要进行什么相关内容的释放么?然后才能执行以下的操作么?
[/Quote]
检查文件属性,同时你拷贝文件是否打开文件没有正确关闭等...
net_boy 2009-03-10
  • 打赏
  • 举报
回复
顶,顶到1楼去。
net_boy 2009-03-10
  • 打赏
  • 举报
回复
顶啊,怎么没有人回答呢?
net_boy 2009-03-09
  • 打赏
  • 举报
回复
不是因为这个原因,好像是那个文件禁止访问,

我再次删除,就报错,然后关闭程序,发现删除出错的那个文件还消失了。

难道我上次删除,复制的时候要进行什么相关内容的释放么?然后才能执行以下的操作么?
tweeger 2009-03-09
  • 打赏
  • 举报
回复
好像:
File.Copy(sourceFileName, destFileName, true);
就可以做到了啊,不需要检测是否已经存在就可以直接覆盖了。
net_boy 2009-03-09
  • 打赏
  • 举报
回复
例如源目录叫1 目标目录叫2
源文件叫 a 目标文件叫 b

我做的操作就是用a替换b,a不能删除,还保留。
zgke 2009-03-09
  • 打赏
  • 举报
回复
如果你要移动文件..可以使用 System.IO.File.Move 没必要复制了再删除把
net_boy 2009-03-09
  • 打赏
  • 举报
回复
分我还可以追加
net_boy 2009-03-09
  • 打赏
  • 举报
回复
其实我们做的类似于Flash的东西,户外广告。

其中要根据这些生成视频文件,可能是生成的时候什么对象没有释放掉,所以导致这种问题。

我想请问一下,C# 怎么根据文件路径 释放引用文件的相关对象,有这样的代码么?
net_boy 2009-03-09
  • 打赏
  • 举报
回复
windows
下的 不是 B/s的
jinjazz 2009-03-09
  • 打赏
  • 举报
回复
不是权限问题就是并发问题,这个东西用web来管理不太好吧

111,126

社区成员

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

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

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