0

テキストボックスを介してフォルダーを別の場所にコピーするコードがあります。Textbox1ここで、ユーザーはコピーするフォルダーを指定でき、コピーtextbox2先のフォルダーを参照できます。

Textbox1が「マイ ドキュメント」へのパスである場合、次のエラーが発生します。

パスへのアクセスC:\Users\%USERNAME%\Documents\My Musicが拒否されました。

「マイ ミュージック」は、Windows 7 で「保護されたオペレーティング システム ファイルを非表示にする」としてチェックされている「マイ ドキュメント」内の隠しフォルダです。私は Visual Studio 2005 を使用しており、VB.net の新機能です。誰でもこのコードを見て、フォルダを除外してコピーする方法を教えてください。

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
    Dim fs As Object = CreateObject("Scripting.FileSystemObject")

    Dim sFolderpath As String = TextBox1.Text
    Dim sourceFolderName As String = System.IO.Path.GetFileName(sFolderpath)

    Dim strDate As String = DateTime.Now.ToString("yyyy-MM-dd")
    Dim dFolderpath As String = System.IO.Path.Combine(TextBox6.Text, strDate)
    fs.createfolder(dFolderpath)
    dFolderpath = System.IO.Path.Combine(dFolderpath, sourceFolderName)
    fs.createfolder(dFolderpath)

    fs.copyfolder(sFolderpath, dFolderpath)
End Sub
4

1 に答える 1

1

問題を 4 つのサブに分割することをお勧めします。最初に、ユーザーがソースと宛先に必要なフォルダーを選択できるようにする 2 つのサブ。コピーを開始するボタンクリックイベントと、実際にコピーを処理するサブイベント。

これを試着してサイズを確認してください:

    Dim CopyFromPath As String
Dim CopyToPath As String

Private Sub TextBox1_MouseClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.MouseClick
    Dim fldbroser1 As New FolderBrowserDialog
    fldbroser1.RootFolder = Environment.SpecialFolder.MyMusic
    fldbroser1.ShowDialog()
    CopyFromPath = fldbroser1.SelectedPath
End Sub

Private Sub TextBox2_MouseClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.MouseClick
    Dim fldbroser1 As New FolderBrowserDialog
    fldbroser1.RootFolder = Environment.SpecialFolder.MyComputer
    fldbroser1.ShowDialog()
    CopyToPath = fldbroser1.SelectedPath
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    CopyAllFiles(CopyFromPath, CopyToPath)
End Sub

Private Sub CopyAllFiles(ByVal CopyFromPath As String, ByVal CopyToPath As String)
    If Not Directory.Exists(CopyToPath) Then
        Directory.CreateDirectory(CopyToPath)
    End If

    For Each filee As String In Directory.GetFiles(Path.GetDirectoryName(CopyFromPath))
        Dim dest As String = Path.Combine(CopyToPath, Path.GetFileName(filee))
        File.Copy(filee, dest)
    Next

    For Each folder As String In Directory.GetDirectories(Path.GetDirectoryName(CopyFromPath))
        Dim dest As String = Path.Combine(CopyToPath, Path.GetFileName(folder))
        CopyAllFiles(folder, dest)
    Next
End Sub

これを機能させるには、System.IO をインポートする必要があります。コードに問題がある場合は、遠慮なく質問してください。頑張って VB を学んでください。面倒なこともありますが、とても便利です。

于 2013-07-17T11:53:04.133 に答える