Переименовать каталог с помощью файла сохранения файла - PullRequest
0 голосов
/ 26 июля 2011

У меня есть папка по этому пути C: \ Users \ XXX \ Desktop \ Оригинал \ XXX \ Bin \ Debug \ Backup

И когда я сохраняю свой проект с именем "XXX" в то же время, мне нужно изменить папку резервного копирования, используя это имя файла сохранения файла, и она не должна перезаписывать его.

Может кто-нибудь предложить мне, как это сделать:

Вот код, как я это делаю, и он не работает для меня:

Private Sub SaveProject_Click (отправитель ByVal как System.Object, ByVal e как System.EventArgs) Обрабатывает SaveProject.Click

    Using sfdlg As New Windows.Forms.SaveFileDialog
        sfdlg.OverwritePrompt = True
        sfdlg.InitialDirectory = "C:\"
        sfdlg.FileName = "Untitled"
        sfdlg.DefaultExt = "amk"
        sfdlg.Filter = "AquaMark Project|*.amk"
        If sfdlg.ShowDialog = Windows.Forms.DialogResult.OK Then


            Dim SaveData As New gCanvasData

            With SaveData
                frmDisplay.GCanvas1.UnselectCurrentAnotate()
                .gAnnotates = frmDisplay.GCanvas1.gAnnotates
                .Image = frmDisplay.GCanvas1.Image

            End With

            Using objStreamWriter As New StreamWriter(sfdlg.FileName)
                Dim x As New XmlSerializer(GetType(gCanvasData))
                x.Serialize(objStreamWriter, SaveData)
                objStreamWriter.Close()
            End Using
        End If
        sfdlg.Dispose()
        System.IO.Path.GetFileNameWithoutExtension(sfdlg.FileName)
        IO.Directory.Move(Application.StartupPath + "\Backup\", Application.StartupPath + "\Backup\" & System.IO.Path.GetFileNameWithoutExtension(sfdlg.FileName))
    End Using
End Sub

Но может ли кто-нибудь ясно упомянуть меня, как это сделать?

1 Ответ

0 голосов
/ 26 июля 2011

В зависимости от ошибки вы, скорее всего, не сможете сохранить файл и изменить имя папки резервной копии через тот же SaveFileDialog.

Разбейте его на два шага:

  1. Сохраните файл через SaveFileDialog. Обязательно запишите имя файла из SaveFileDialog, чтобы вы могли использовать его на шаге 2, так как оно может выйти за рамки после закрытия окна SaveFileDialog.
  2. Переименуйте папку резервной копии с помощью приведенной выше команды, но после вы закрыли SaveFileDialog, чтобы дескриптор был освобожден.

EDIT

Как я отметил на шаге 1, вам нужно где-то сохранить имя файла, чтобы вы могли использовать его на шаге 2.

Private Sub SaveProject_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveProject.Click

   ' Set up a variable to hold the filenam
   Dim fileName As String

    Using sfdlg As New Windows.Forms.SaveFileDialog
        sfdlg.OverwritePrompt = True
        sfdlg.InitialDirectory = "C:\"         
        sfdlg.FileName = "Untitled"         
        sfdlg.DefaultExt = "amk"         
        sfdlg.Filter = "AquaMark Project|*.amk"         

        If sfdlg.ShowDialog = Windows.Forms.DialogResult.OK Then
            Dim SaveData As New gCanvasData 

            ' Store the filename from the SaveFileDialog
            fileName = sfdlg.FileName             

            With SaveData                 
                frmDisplay.GCanvas1.UnselectCurrentAnotate()                 
                .gAnnotates = frmDisplay.GCanvas1.gAnnotates                 
                .Image = frmDisplay.GCanvas1.Image              
            End With              

            Using objStreamWriter As New StreamWriter(sfdlg.FileName)                 
                Dim x As New XmlSerializer(GetType(gCanvasData)) 
                x.Serialize(objStreamWriter, SaveData)     
                objStreamWriter.Close()             
            End Using         
        End If         

        'Calling Dispose is redundant since sfdlg was in a Using block
        'sfdlg.Dispose()         
        ' You can't use sfdlg.FileName here as the object is out of scope
        'System.IO.Path.GetFileNameWithoutExtension(sfdlg.FileName)
        'IO.Directory.Move(Application.StartupPath + "\Backup\", Application.StartupPath + "\Backup\" & System.IO.Path.GetFileNameWithoutExtension(sfdlg.FileName)) 
         ' Use the value in fileName from above
         System.IO.Directory.Move(Application.StartupPath + "\Backup\", Application.StartupPath + "\Backup\" & System.IO.Path.GetFileNameWithoutExtension(fileName))    
    End Using 
End Sub
...