2014-06-20 4 views
0

Я пытаюсь переименовать файлы перед переходом в другую подпапку. Первое, что я делаю, это получить имена файлов и расширения файлов в папке LOCATION FOLDER. После этого я проверяю, существуют ли эти файлы в ACTIVE FOLDER. Если да, я переименовал его, добавив добавочное целое число.Как переименовать переименованный файл, если он уже существует в asp.net?

Например, LOCATION FOLDER содержит файл sample.txt и ACTIVE FOLDER не имеет такого файла. В этом случае мне не нужно переименовывать файл sample.txt, все, что мне нужно сделать, это переместить его в ACTIVE FOLDER. Но когда ACTIVE FOLDER содержит такое имя файла, при его перемещении его нужно переименовать в образец (1) .txt, а когда другой файл в LOCATION FOLDER имеет имя файла sample.txt при перемещении, должен быть образцом (2) .txt.

Ниже мой код

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 


    Dim dir As New DirectoryInfo("C:\Documents and Settings\Admin\Desktop\LOCATION") 
    Dim Folder1Files As FileInfo() = dir.GetFiles() 

    For Each nFile As FileInfo In Folder1Files 

     Dim fileName As String = Path.GetFileNameWithoutExtension(nFile.Name) 
     Dim fileExt As String = Path.GetExtension(nFile.Name) 
     Dim newFileName As String 
     Dim fileNumber = 0 


     If File.Exists("C:\Documents and Settings\Admin\Desktop\LOCATION\ACTIVE FOLDER\" & fileName & fileExt) Then 

      fileNumber += 1 
      newFileName = String.Format("{0}({1}){2}", fileName, fileNumber, fileExt) 


      File.Move("C:\Documents and Settings\Admin\Desktop\LOCATION\" & fileName & fileExt, "C:\Documents and Settings\Admin\Desktop\LOCATION\ACTIVE FOLDER\" & newFileName) 

     Else 
      File.Move("C:\Documents and Settings\Admin\Desktop\LOCATION\" & fileName & fileExt, "C:\Documents and Settings\Admin\Desktop\LOCATION\ACTIVE FOLDER\" & fileName & fileExt) 
     End If 


    Next 


End Sub 

Всякий раз, когда я пытался отладить выше кода, и «sample.txt» существует при перемещении становится «образец (1) .txt», поэтому это правильно, но когда " sample.txt 'снова появляется на LOCATION FOLDER при перемещении, он становится «sample (1) (1) .txt», где на самом деле это должен быть «sample (2) .txt».

Что мне делать, чтобы получить ожидаемый результат?

Заранее спасибо.

+0

Try, не делая добавляемый работы- просто оставить Номер_файл как 1. Не увеличивает его на 1. –

+0

он не работает, сэра ... –

ответ

1

Попробуйте этот код и извините, если есть синтаксическая ошибка, так как я преобразовал свой код с C# в VB.

Dim oldDir As String = "C:\Documents and Settings\Admin\Desktop\LOCATION" 
Dim newDir As String = "C:\Documents and Settings\Admin\Desktop\LOCATION\ACTIVE FOLDER\" 
Dim newFileName As String = String.Empty 
Dim dir As New DirectoryInfo(oldDir) 
Dim Folder1Files As FileInfo() = dir.GetFiles() 

For Each nFile As FileInfo In Folder1Files 
    Dim oldFileName As String = Path.GetFileNameWithoutExtension(nFile.Name) 
    Dim fileExt As String = Path.GetExtension(nFile.Name) 
    Dim oldPath As String = oldDir & oldFileName & fileExt 
    Dim newPath As String = newDir & oldFileName & fileExt 
    Dim index As Integer = 1 

    While File.Exists(newPath) 
     newFileName = oldFileName & "(" & index & ")" 
     newPath = newDir & newFileName & fileExt 
     index += 1 
    End While 

    File.Move(oldPath, newPath) 
Next 

Надеюсь, это даст вам лучшую подсказку.

0

Попробуйте это:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 


Dim dir As New DirectoryInfo("C:\Documents and Settings\Admin\Desktop\LOCATION") 
Dim Folder1Files As FileInfo() = dir.GetFiles() 

For Each nFile As FileInfo In Folder1Files 

    Dim fileName As String = Path.GetFileNameWithoutExtension(nFile.Name) 
    Dim fileExt As String = Path.GetExtension(nFile.Name) 
    Dim newFileName As String 
    Dim fileNumber = 0 

    string pathAndFileName = dir & Path.DirectorySeparatorChar & fileName 
    string fileExtension = "." & fileExt 

    ' if file exists then add a file counter at the end of the file name 
    int fileNumber = 1 
    while (File.Exists(pathAndFileName & fileExtension))  ' Check if the file already exists 
    { 
     string fileNameConcatenationStr = "_" & String.Format("{0:0000}", fileNumber)  ' The file name format will be something like --> FileName_0001.csv 
     pathAndFileName = Path.GetDirectoryName(pathAndFileName) & Path.DirectorySeparatorChar & fileName & fileNameConcatenationStr & Path.GetExtension(pathAndFileName)  ' Insert the _0001 string into the file name and path. 
     fileNumber += 1 
    } 

    ' Do your file move here using pathAndFileName & fileExtension 
    File.Move(....) 




Next 
Смежные вопросы