0

したがって、これはあるディレクトリから別のディレクトリにファイルを移動するアプリケーションを作成する必要があり、両方のディレクトリはユーザーによって指定されます。簡単そうに見えますが、問題は何百万ものファイルを検索しなければならないことです。これらのファイルにはすべて、「98938495.crt」のように 8 桁の名前が付けられています。これらすべてのファイルがあるディレクトリには、複数のフォルダーがあります。メイン フォルダー内のこれらのフォルダーには、フォルダー内にあるすべてのファイルの最初の 2 桁の名前が付けられます。そして、そのフォルダーには、それぞれ 100,000 個のファイルを含む約 10 個の圧縮フォルダーがあります。これらのフォルダーの名前は、ファイルの最小名と最大名です。たとえば、メイン フォルダに移動し、「90xx」フォルダをクリックします。その中には、ファイルの最小名と最大名で名前が付けられた 10 個の圧縮フォルダーがあります。「90000000_90099999.zip」のように。その zip フォルダーには 100000 個のファイルが含まれています。現在、このアプリは、ユーザーが入力したすべてのファイルを見つけて、ユーザーが指定したフォルダーに移動することになっています。これまでのコードを以下に投稿しました。どんな助けでも大歓迎です!!

参考: STID はファイルの名前です。

アプリの GUI

編集:実際には質問がなく、アプリが壊れているだけなので、この質問に答える方法がないことに気付きました。基本的に、ディレクトリ内のアイテムを検索して新しいディレクトリにコピーするにはどうすればよいですか?

Imports System
Imports System.IO


Public Class CertFinder

Private Sub SourceDirectoryTB_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SourceDirectoryTB.TextChanged

End Sub

Private Sub DestinationDirectoryTB_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DestinationDirectoryTB.TextChanged

End Sub

Private Sub SearchTB_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchTB.TextChanged


End Sub

Private Sub SourceButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SourceButton.Click

    Dim fbd As New FolderBrowserDialog
    fbd.RootFolder = Environment.SpecialFolder.MyComputer
    If fbd.ShowDialog = DialogResult.OK Then
        SourceDirectoryTB.Text = fbd.SelectedPath

    End If

End Sub

Private Sub DestinationButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DestinationButton.Click

    Dim fbd As New FolderBrowserDialog
    fbd.RootFolder = Environment.SpecialFolder.MyComputer
    If fbd.ShowDialog = DialogResult.OK Then
        DestinationDirectoryTB.Text = fbd.SelectedPath
    End If

End Sub




Private Sub SearchButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchButton.Click

    'Array of stids
    Dim stidsToFind As String()

    'get text in the searchTB textbox
    Dim searchTBText As String = Me.SearchTB.Text.Trim()

    'splits stids into seperate lines
    stidsToFind = searchTBText.Split(vbCrLf)

    'gets text from source directory text box
    Dim sourceDirectory As String = Me.SourceDirectoryTB.Text.Trim()

    'gets text from destination directory text box
    Dim destinationDirectory As String = Me.DestinationDirectoryTB.Text.Trim()

    Dim fullPathToFile As String = sourceDirectory

    'Go through each stid in the search text box and continue if nothing
    For Each stidToFind As String In stidsToFind

        If String.IsNullOrWhiteSpace(stidToFind) Then
            Continue For
        End If


        'Find the first two digits of the stid
        Dim firstTwoDigitsOfSTID As String = stidToFind.Substring(0, 2)

        'In the specified directory, find the folder with the first two digits and "xx"
        fullPathToFile = fullPathToFile & "\" & firstTwoDigitsOfSTID & "xx"



        Dim allFileNames As String() = Nothing
        allFileNames = Directory.GetFiles(sourceDirectory, "*.crt*", SearchOption.AllDirectories)

    Next

    '-------------------------------------------------------------------------------

    Try
        If File.Exists(fullPathToFile) = False Then
            Dim FS As FileStream = File.Create(fullPathToFile)
            FS.Close()
        End If


        File.Move(fullPathToFile, destinationDirectory)
        Console.WriteLine("{0} moved to {1}", fullPathToFile, destinationDirectory)

    Catch ex As Exception

        MessageBox.Show("File does not exist")

    End Try




    Dim sc As New Shell32.Shell()

    'Declare the folder where the files will be extracted
    Dim output As Shell32.Folder = sc.NameSpace(destinationDirectory)
    'Declare your input zip file as folder  .
    Dim input As Shell32.Folder = sc.NameSpace(stidsToFind)
    'Extract the files from the zip file using the CopyHere command .
    output.CopyHere(input.Items, 4)

    '-------------------------------------------------------------------------------



    ' 1. Get the names of each .zip file in the folder.
    ' 2. Assume that the .zip files are named as such <minimum STID>_<maximum STID>.zip
    ' 3. For each .zip file name, get the Minimum STID and Maximum STID values.
    ' 4. Check the range of 'stidToFind' against the STID ranges of each .zip file.
    ' 5. Once the .zip file is located, 
    '   a. Copy the .zip file to the local computer OR
    '   b. Just leave it where it is.
    ' 6. Unzip the file.
    ' 7. Create the full file name path. ../<stidToFind>.crt
    ' 8. Copy the file to the destination directory.
    ' 9. Delete the unzipped folder
    ' 10. Delete the .zip file (IF you've copied it to your local computer).








End Sub

クラス終了

4

1 に答える 1

0
  1. .ZIP 解凍の答えとして、System.IO.Packaging を使用します ( CodeProject - Zip Files Easyで詳細を確認できます) 。
  2. データベースを使った方がそのデータを保存しやすいと思いませんか?
于 2013-08-11T00:20:28.133 に答える