1

ファイルでいっぱいになるフォルダー(1)があり、それらのファイルはListViewBoxに表示され、その横にチェックボックスがあります。Button1 を押してファイル名の横にあるチェックボックスをオンにすると、そのファイルが次のフォルダー (2) に移動することを理解しようとしています。(フォルダ 1 には 10 個のファイルがあり、ユーザーはフォルダ 2 に移動するファイルを選択できるという考えです)。

For Eachを使用してループを機能させるのに苦労していますListViewMy.Computer.Filesystem.Moveとを使ってみIO.File.Moveましたが、ファイルごとに変わるファイル名をリストビューボックスのチェックされた項目に結び付けるのに苦労しています。どんな助けでも大歓迎です。

これが私のコードです:

Public Class Form1
    Public MySource As String = "C:\DataEntryTest\LogFiles\"

    Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim folderinfo As IO.DirectoryInfo = New IO.DirectoryInfo(MySource)
        ListView1.FullRowSelect = True
        ListView1.CheckBoxes = True

        With ListView1
            .Clear()
            .View = View.Details
            .Columns.Add("Name", 150)

            For Each myFile As IO.FileInfo In folderinfo.GetFiles
                Dim myListItem As ListViewItem = New ListViewItem(myFile.Name)
                .Items.Add(myListItem)
            Next
        End With
    End Sub

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

    End Sub
End Class
4

2 に答える 2

1

ボタン クリック イベント ハンドラーで、CheckedItemsコレクションをループし、ファイルをソース ディレクトリからターゲット ディレクトリに移動して、正しいファイル拡張子を追加します。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    For Each itemChecked As Object In ListView1.CheckedItems
        Dim itemName As String = itemChecked.ToString()
        File.Move(Path.Combine(MySource, itemName), Path.Combine(MyTarget, itemName)
    Next
End Sub
于 2013-09-11T20:52:33.767 に答える
1

ListView1 の要素を繰り返し処理し、必要な要素を移動する (そしてリストから削除する) 必要があります。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim destDir As String = "dir to move-to path"   

    With ListView1
        For i As Integer = .Items.Count - 1 To 0 Step -1
            If .Items(i).Checked Then
                Try
                    Dim newPath As String = destDir & Path.GetFileName(.Items(i).Text)
                    If Not File.Exists(MySource & .Items(i).Text) Then
                        .Items(i).Remove()
                    Else
                        If Not File.Exists(newPath) Then
                            File.Move(MySource & .Items(i).Text, newPath)
                            .Items(i).Remove()
                        End If
                    End If
                Catch
                End Try
            End If
        Next
    End With

End Sub

注: 「ファイル管理」が問題になりがちなので、try...catch を追加しています (そして、このMove方法は非常に柔軟ではありません)。

于 2013-09-11T20:54:23.250 に答える