我正在编写一个程序,将所需的某些文件从一个文件夹复制到另一个文件夹。但是,我只希望它复制符合某些条件的文件,更具体地说,它应该只复制不在禁止文件、禁止扩展或禁止文件夹列表中的文件,这些文件存储在这样的数组中:
Public BannedExtensions As String() = {".bak", ".bak2", ".cry", ".max", ".psd",
"log", ".lib", "pdb", ".exp"}
Public BannedFolders As String() = {"Tools", "Editor", "Code", "LogBackups",
"statoscope", "BinTemp", "USER", "rc"}
Public BannedFiles As String() = {"Editor.exe", "error.bmp", "error.dmp",
"luac.out", "tags.txt"}
然后代码应该将它们移动到一个临时目录,然后将它们压缩并将它们保存到存储在File_Name
变量中的位置。
这是我的整个代码:
Option Strict On
Public Class Form1
'define the two variables used for tracking file name and where to save'
Private Property Root_Folder As String
Private Property File_Name As String
'define the variable which dictates wether we copy the file
Private Property copy As Boolean
'define which files we need and do not need'
Public BannedExtensions As String() = {".bak", ".bak2", ".cry", ".max", ".psd", "log", ".lib", "pdb", ".exp"}
Public BannedFolders As String() = {"Tools", "Editor", "Code", "LogBackups", "statoscope", "BinTemp", "USER", "rc"}
Public BannedFiles As String() = {"Editor.exe", "error.bmp", "error.dmp", "luac.out", "tags.txt"}
Function Copy_RequiredFiles() As Integer
Dim i As Integer = 0
'Searches directory and it's subdirectories for all files, which "*" stands for
'Say for example you only want to search for jpeg files... then change "*" to "*.jpg"
For Each filename As String In IO.Directory.GetFiles(Root_Folder, "*", IO.SearchOption.AllDirectories)
copy = True
Dim fName As String = IO.Path.GetFileName(filename)
Dim fExtension As String = IO.Path.GetExtension(filename)
Dim fFolder As String = IO.Path.GetDirectoryName(filename)
For i = 0 To BannedExtensions.Length - 1
If fExtension = BannedExtensions(i) Then
RichTextBox1.Text = RichTextBox1.Text & vbNewLine & "Extension: " & filename
copy = False
End If
Next
If copy = True Then
i = 0
For i = 0 To BannedFolders.Length - 1
If filename = BannedFolders(i) Or BannedFolders(i).Contains(filename) Then
RichTextBox1.Text = CStr(CBool(RichTextBox1.Text & vbNewLine & "Folder: " &
copy) = False)
End If
Next
If copy = True Then
i = 0
For i = 0 To BannedFiles.Length - 1
If filename = BannedFolders(i) Or BannedFolders(i).Contains(filename) Then
RichTextBox1.Text = RichTextBox1.Text & vbNewLine & "Folder: " & filename
copy = False
End If
Next
End If
End If
If copy = True Then
'copy the file into the selected folder'
End If
Next
Return 0
End Function
'when the browse button for selecting the folder is selected'
Private Sub Browse_Root_Click(sender As Object, e As EventArgs) Handles Browse_Root.Click
'check if the folder dialogue has been opened successfully and something has been selected'
If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then '
'set the textbox and the previously defined variable to the folder selected'
TextBox1.Text = FolderBrowserDialog1.SelectedPath
Root_Folder = FolderBrowserDialog1.SelectedPath
End If
End Sub
'when the browse button for where to save the file is selected'
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'set the options to limit the save type to a zip file'
SaveFileDialog1.Filter = "zip files (*.zip)|*.zip"
'check that the dialogue box has opened succesfully'
If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
'set the text box and the previously defined variable to the file selected'
TextBox2.Text = SaveFileDialog1.FileName()
File_Name = SaveFileDialog1.FileName()
End If
End Sub
'when the user changes the value of the textbox update the folder to select from'
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Root_Folder = TextBox1.Text
End Sub
'when the user changes the value of the textbox update the file to save to'
Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
File_Name = TextBox2.Text
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Copy_RequiredFiles()
End Sub
End Class
'when the browse button for selecting the folder is selected'
Private Sub Browse_Root_Click(sender As Object, e As EventArgs) Handles Browse_Root.Click
'check if the folder dialogue has been opened successfully and something has been selected'
If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then '
'set the textbox and the previously defined variable to the folder selected'
TextBox1.Text = FolderBrowserDialog1.SelectedPath
Root_Folder = FolderBrowserDialog1.SelectedPath
End If
End Sub
'when the browse button for where to save the file is selected'
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'set the options to limit the save type to a zip file'
SaveFileDialog1.Filter = "zip files (*.zip)|*.zip"
'check that the dialogue box has opened succesfully'
If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
'set the text box and the previously defined variable to the file selected'
TextBox2.Text = SaveFileDialog1.FileName()
File_Name = SaveFileDialog1.FileName()
End If
End Sub
'when the user changes the value of the textbox update the folder to select from'
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Root_Folder = TextBox1.Text
End Sub
'when the user changes the value of the textbox update the file to save to'
Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
File_Name = TextBox2.Text
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Copy_RequiredFiles()
End Sub
End Class
我有一些问题,
首先,这就是为什么当我运行程序并打印它发现它不应该复制的文件时,它没有显示循环中第二个或第三个 if 语句的任何内容。
第二个是在复制到临时文件时如何保留文件夹结构。
第三,压缩这个临时文件夹的最佳方式是什么。
在此先感谢,马库斯