文件重命名问题?

7

在c#中重命名文件:

File.Move(source,Destination);
            File.Delete(source);

执行成功,但是当我尝试重新命名文件时,系统会出现以下异常:由于另一个进程正在使用该文件,因此无法访问该文件。我找不到哪里在使用它?当我进一步调试错误时,它显示类名在处理IIS的w3wp.exe进程中。接下来我该怎么办?

foreach (string folder in folder)
{ 
 FileSystemItem item = new FileSystemItem(); 
 DirectoryInfo di = new DirectoryInfo(folder); 
 item.Name = di.Name;
 item.FullName = di.FullName; 
 item.Path = path + "\\" + item.Name;
 item.CreatedDate = di.CreationTime; 
 item.IsFolder = true; 
 item.Extension = "folder";
 listFolder.Add(item);
}
docList = CreatXmllist(listFolder); 
return docList

这是我获取文件夹列表并将其返回到xml的方法。然后在文件夹中,当我单击它时,我会获取文件。

现在来获取图片:这是代码:

public xml (string path, List<l> one)
    {

        List<T> tt = new List<T>();
        List<T> SessionList = new List<T>();
        string[] files = Directory.GetFiles(HttpContext.Current.Request.PhysicalApplicationPath + path);

        foreach (string file in files)
        {
            FileSystemItem item = new FileSystemItem();
            FileInfo i = new FileInfo(file);
            string  a = i.LastWriteTime.ToString();
            var thumbnails = from a in b where a.Name == fi.Name select t;

            if (fi.Name != "a")
                if (t.Count() == 0)
                {
                    r session r = new r();
                    r.aName = fi.aName;
                    SessionList.Add(r);
                    fi.Exists;
                }
                else
                    t.Add((T)t.First());

        }

3
更名后,为什么要删除源代码? - GolezTrol
你尝试手动重命名文件了吗?以查看是否有其他进程正在使用该文件。 - hallie
你有其他可能使用该文件的程序吗?例如杀毒软件等。尝试将它们全部关闭。或者你的程序以某种方式使用了那个文件。 - Anton Semenov
w3wp进程是IIS进程... - Peter van Kekem
@ C. Ross 在获取文件夹后,当我点击文件夹时,我可以看到文件,但是当尝试重命名/删除时,就会出现错误:( - safi
显示剩余10条评论
3个回答

2

在重命名时,您不需要调用File.Delete,如果您进行了复制操作,则需要该方法。


我删除了 file.delete(source) 语句,但仍然出现错误 :( - safi

1
创建一个FileInfo实例,您可以多次重命名它。
FileInfo file = new FileInfo(source);
file.MoveTo(destination);

// execute more code

file.MoveTo(destination2)

请问您能否提供更多关于异常的细节信息?(堆栈跟踪,内部异常,或者从事件查看器中获取的信息) - Peter van Kekem
我可以得到关于这个问题的帮助吗? - safi
如果您在Visual Studio中调试问题,您会得到异常。在那里,您可以单击“查看详细信息”,以获取有关异常的更多详细信息。 - Peter van Kekem

1

FileStream s2 = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read); 这里有一个 FileShare.Read 参数,那么如果文件已经被另一个用户打开,就可以删除它吗? - safi
好的,谢谢。我正在尝试做这件事,然后我必须在file.move(source,dest)中指定s2,这样它就会变成file.move(s2,destination)? - safi
@safi 在进行移动操作之前,你需要关闭任何读取器或写入器。即使文件处于读写共享状态,也不能在其打开的情况下移动它。 - C. Ross

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接