2

如果文件名已存在于文件夹中,我想重命名用户上传的文件名。

string existpath = Server.MapPath("~\\JD\\");

DirectoryInfo ObjSearchDir = new DirectoryInfo(existpath);
if (ObjSearchFile.Exists)
 {
  foreach (FileInfo fi in ObjSearchFile.GetFiles())
    {
        fi.CopyTo(existfile, false);
     }
  }

此代码不起作用,它无法找到现有文件。

4

2 回答 2

1

这里肯定CopyTo()是行不通的,因为您已将 OverWrite 选项设置为false(的第二个参数CopyTo()。如果文件存在并且覆盖为 false,IOException则通过以下行抛出an:。fi.CopyTo(existfile, false);检查MSDN

您可以参考以下两个代码来完成相同的任务。你更喜欢哪一个取决于你。任何想法哪个更好?

方法 1:使用File.Copy(), File.Delete(). 请参阅MSDN_1MSDN_2

 string sourceDir = @"c:\myImages";
    string[] OldFileList = Directory.GetFiles(sourceDir, "*.jpg");
        foreach (string f in OldFileList)
        {
            // Remove path from the file name. 
            string oldFileName = f.Substring(sourceDir.Length + 1);
            // Append Current DateTime 
            String NewFileName= oldFileName + DateTime.Now().ToString();
            File.Copy(Path.Combine(sourceDir,oldFileName),
                      Path.Combine(sourceDir,NewFileName);
            File.Delete(oldFileName);
        }

在这种情况下,您可以指定相对路径和绝对路径。相对路径将被视为相对于您当前的工作目录。

方法 2:使用FileInfo.MoveTo. 参考MSDN

protected void btnRenameOldFiles_Click(object sender, System.EventArgs e)
  {
    string source = null;                
    //Folder to rename files
    source = Server.MapPath("~/MyFolder/");    
    foreach (string fName in Directory.GetFiles(source)) {
        string dFile = string.Empty;
        dFile = Path.GetFileName(fName);
        string dFilePath = string.Empty;
        dFilePath = source + dFile;
        FileInfo fi = new FileInfo(dFilePath);
            //adding the currentDate
        fi.MoveTo(source + dFile + DateTime.Now.ToString());
    }       
}
于 2013-08-13T12:07:19.787 回答
0

这篇文章中,CopyTo 方法只会设置是否要覆盖现有文件。您应该做的是使用以下方法检查文件是否存在于目标目录中:

File.Exists(path)

如果是,您需要重命名您正在使用的文件(我不确定您拥有的 ObjSeachFile 对象是什么),然后尝试重新保存它。另外请记住,如果您有另一个同名的现有文件,您应该重新检查该文件是否存在。

于 2013-08-13T12:00:36.563 回答