如果文件已存在于目录中,如何重命名该文件(ASP.net)

时间:2014-07-31 11:53:47

标签: c# asp.net

我在网上看过很多文件上传问题,但它似乎对我不起作用。 我需要重命名我的文件,如果它已存在于目录中。

我甚至尝试过将MSDN另存为/重命名方法,但它似乎不起作用,也许我错过了一些东西。我不想删除或覆盖任何人。

这是我目前使用的,但它只是覆盖了文件

string folderName = Server.MapPath("\\Track\\Upload");    
string pathString = System.IO.Path.Combine(folderName, SupDDL.SelectedItem.Text.Trim());
System.IO.Directory.CreateDirectory(pathString);
string fileName = QuoteUpload.FileName;
if (!System.IO.File.Exists(pathString))
{
using (System.IO.FileStream fs = System.IO.File.Create(pathString))
 {
   for (byte i = 0; i < 100; i++)
  {
   fs.WriteByte(i);
   }
QuoteUpload.SaveAs(pathString)}
}

对不起,如果我没有提供足够的详细信息,请告诉我您是否需要更多信息。

已更新

所以我已经更新了它,它完成了工作,但我希望它能自动增加数字,而不是只添加2次。

int count = 2;
string fileNameOnly = Path.GetFileNameWithoutExtension(pathString);
string extension = Path.GetExtension(pathString);
string path = Path.GetDirectoryName(pathString);
string newPath = pathString;

if (!System.IO.File.Exists(pathString))
{
QuoteUpload.SaveAs(pathString);
}
else {
string tempName = string.Format("{0}({1})", fileNameOnly, count++);
newFullPath = Path.Combine(path, tempFileName + extension);
QuoteUpload.SaveAs(newPath); }
}

4 个答案:

答案 0 :(得分:0)

尝试将保存称为。

if (!System.IO.File.Exists(pathString))
{
   QuoteUpload.SaveAs(pathString);
}

答案 1 :(得分:0)

据我所知,现在c#中有“Rename()”方法。

运行超过100个字节并不聪明,因为你永远不会知道上传文件有多大..

您可以做的是创建帮助功能:

第一个 - 将检查文件是否存在

第二个 - 将删除/覆盖现有文件

第三个 - 将上传新文件

如下: 1 + 2。

public void DeleteFileIfExists(string BaseDir, string fileName)
{
    DirectoryInfo dir = new DirectoryInfo(BaseDir);

    foreach (FileInfo fi in dir.GetFiles())
    {
        string NameWithoutExtenstion = Path.GetFileNameWithoutExtension(fi.Name);
        if (NameWithoutExtenstion.Equals(fileName))
        {
            fi.Delete();
            break;
        }
    }
}

3

public void uploadFile(HttpPostedFileBase oldfile, string newFile, string Path, HttpServerUtilityBase Server)
{
    string path = Path.Combine(Server.MapPath(Path),
                               Path.GetFileName(oldfile.FileName)); //file.FileName
    oldfile.SaveAs(path);
    System.IO.File.Copy(path, Server.MapPath(Path) + "/" + newName + ".FileExt");
    DeleteFileIfExists(Server.MapPath(Path), Path.GetFileNameWithoutExtension(oldfile.FileName));
}

以下功能适用于任何类型的文件。

如果您有任何进一步的问题,请询问。

祝你好运!

答案 2 :(得分:0)

没有重命名功能,您可以通过使用新名称复制文件并删除旧名称来执行此操作。

C#示例

string strFilePath = Server.MapPath("~/FilesFolder/");
string strOldFileName = "OldFileName.rar";
string strNewFileName = "NewFilName.rar";

if (System.IO.File.Exists(strFilePath + strOldFileName)) {
    System.IO.FileInfo FileInfo = new System.IO.FileInfo(strFilePath + strOldFileName);
    FileInfo.CopyTo(strFilePath + strNewFileName, true);
    FileInfo.Delete();
}



VB示例

Dim strFilePath As String = Server.MapPath("~/FilesFolder/")
Dim strOldFileName As String = "OldFileName.rar"
Dim strNewFileName As String = "NewFilName.rar"

If IO.File.Exists(strFilePath & strOldFileName) Then
    Dim FileInfo As IO.FileInfo = New IO.FileInfo(strFilePath & strOldFileName)
    FileInfo.CopyTo(strFilePath & strNewFileName, True)
    FileInfo.Delete()
End If

答案 3 :(得分:0)

在使用之前,您应该检查文件是否存在重命名:

            if (File.Exists(pathString))
                File.Move(pathString, newFilePath);