2013-07-17 63 views
0

我有一个代码,通过文本框将文件夹复制到另一个位置。 Textbox1其中用户可以指定要复制的文件夹,并且textbox2用户可以浏览目标文件夹。复制文件夹和排除文件夹

如果Textbox1是“我的文档”发生一个错误说法的路径:

访问路径C:\Users\%USERNAME%\Documents\My Music被拒绝。

“我的音乐”,是在“我的文档”被选中为一个隐藏文件夹“隐藏受保护的操作系统文件”的窗口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 

回答

1

我建议将问题分解为4个子目录。首先是两个子目录,允许用户选择他们想要的源文件夹和目标文件夹。开始复制的按钮单击事件,最后是实际处理复制的子事件。

试试这个关于大小:

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,它有时可能很烦人,但它非常有用。

+0

谢谢,我会尽力将其实现到我的代码。也许你知道为什么windows 7在“我的文档”中为隐藏文件夹标准的“我的音乐”,“我的图片”和“我的视频”? –

+0

我看不到任何用户拥有我的文档/音乐等文件夹的任何理由将被隐藏。如果您尝试将不同用户的文件夹访问到正在运行代码的用户的文件夹,则可能是此问题。我想有一种解决方法是使用安全权限,但如果我提供的代码有效,它应该是合理的,并且用户友好。 – FraserOfSmeg

+0

感谢您的帮助“FraserOfSmeg”,但我需要坚持原来的代码。请看看我的另一个问题,这个问题会解释更多关于这个问题的信息。 –