【问题标题】:file renaming problem?文件重命名问题?
【发布时间】:2011-03-01 09:50:11
【问题描述】:

在 C# 中重命名文件:

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

它执行成功,但是当我再次尝试重命名文件时,系统给出了这个异常: 该进程无法访问该文件,因为它正被另一个进程使用。 我找不到这个在哪里使用?当我进一步调试错误时,它显示类名在 w3wp.exe 的进程中,即 IIS。接下来我该怎么办? 得到

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());

        }

【问题讨论】:

  • 为什么重命名后要删除源?
  • @Golez Trol:因为我移动了文件(就像复制一样)并将其重命名为新名称。
  • 我认为不需要第二行
  • @Hallie:我删除了 file.delete(source) 仍然给我错误:(
  • 您是否尝试过手动重命名文件?查看是否没有其他进程正在使用该文件。

标签: c# file file-rename


【解决方案1】:

您不需要调用 File.Delete 作为重命名的一部分,如果您做了一个副本,您将需要它。

【讨论】:

  • 我删除了 file.delete(source) 仍然给我错误:(
【解决方案2】:

尝试使用 FileShare 枚举器。然后尝试用monesharing打开一个文件,关闭句柄,如果没有异常就可以移动文件了。

http://msdn.microsoft.com/de-de/library/system.io.fileshare.aspx

它包含Read、Write等方法

【讨论】:

  • FileStream s2 = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read);有一个参数fileshare.read,那么如果已经被其他用户打开了就可以删除?
  • 好的,谢谢,我正在尝试这样做,然后我必须在 file.move(source,dest) 中指定 s2 ,所以它会像 file.move(s2,destination) ?
  • @safi 您需要在移动之前关闭所有读取器或写入器。即使文件正在共享以供读写,您也无法在文件打开时移动它。
【解决方案3】:

创建一个FileInfo 实例,您可以在其中多次重命名它。

FileInfo file = new FileInfo(source);
file.MoveTo(destination);

// execute more code

file.MoveTo(destination2)

【讨论】:

  • 能否请您发布有关异常的更多详细信息? (Stacktrace,内部异常,可能来自事件查看器)
  • 我可以就这个问题寻求帮助吗?
  • 如果您调试问题,您会在 Visual Studio 中获得异常。在那里您可以点击“查看详细信息”,在这里您可以找到有关您的异常的更多详细信息。
猜你喜欢
  • 1970-01-01
  • 2018-11-30
  • 2014-02-06
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2015-08-05
相关资源
最近更新 更多