我有一个日志文件,每次创建时都会保留* .docx扩展名的完整路径。问题是我不知道如何从完整路径中分割文件的名称。在移动它之前,我可以选择使用CheckedListBox创建的路径并将其移动到目标文件夹。
例如,在我的日志文件I商店(文件已创建:C:\Users\AsrahLim\Desktop\New Microsoft Word Document.docx
)中,我只需要文件的名称"新的Microsoft Word Document.docx"并将其移至新文件夹。
这是我的目标文件夹:C:\Users\AsrahLim\Google Drive
。以下是我的代码。
Imports System.IO
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
CheckedListBox1.Items.Add("Select/UnSelect All")
CheckedListBox1.CheckOnClick = True
Dim FILE_NAME As String = "C:\Users\AsrahLim\Desktop\LogFile.txt"
If System.IO.File.Exists(FILE_NAME) Then
Dim objReader As New System.IO.StreamReader(FILE_NAME)
Do While objReader.Peek() <> -1
CheckedListBox1.Items.Add(objReader.ReadLine())
btnSave.Enabled = True
Loop
Else
MessageBox.Show("File Does Not Exist")
Close()
End If
End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
If CheckedListBox1.CheckedItems.Count <> 0 Then
For i As Integer = 0 To CheckedListBox1.CheckedItems.Count - 1
Dim SourcePath As String = CheckedListBox1.SelectedItem
Dim MoveLocation As String = "C:\Users\AsrahLim\Google Drive"
SourcePath = SourcePath.Substring(SourcePath.LastIndexOf("- ") + 1)
If File.Exists(SourcePath) = True Then
File.Move(SourcePath, MoveLocation)
MsgBox("File Moved")
Else
MsgBox("File Not move")
End If
Next
End If
End Sub
Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click
Close()
End Sub
End Class
答案 0 :(得分:2)
不要尝试为路径操作实现自己的逻辑。请改用System.IO
中的共享Path
class。
Dim filename As String = Path.GetFileName(SourcePath)
然后您可以使用
构建新路径名Dim destinationPath As String = Path.Combine(MoveLocation, filename)
另外,测试文件是否也存在于目标位置,如果存在则将其删除。
If File.Exists(SourcePath) Then
Dim filename As String = Path.GetFileName(SourcePath)
Dim destinationPath As String = Path.Combine(MoveLocation, filename)
If File.Exists(destinationPath) Then
File.Delete(destinationPath)
End If
File.Move(SourcePath, destinationPath)
MsgBox("File Moved")
Else
MsgBox("File Not move")
End If
附注:我不喜欢像If File.Exists(SourcePath) = True Then
这样的陈述。通常人们认为If语句需要进行比较。这不是真的。它需要的只是一个布尔表达式,即返回True
或False
的表达式。 File.Exists(SourcePath)
是一个完全符合这一要求的表达式。附加= True
不会改变任何内容并且是多余的,因为如果File.Exists(SourcePath)
返回True
,则True = True
为True
,如果File.Exists(SourcePath)
返回{ {1}}然后False
为False = True
。对于数字,False
是= True
的中性操作。您没有说* 1
,只是说Foo(1 * x)
。
答案 1 :(得分:0)
在您的日志中非常简单,您可以使用分隔符存储,例如:
New File Created*C:\test.docx
星号是文件名中的禁止字符,因此您可以确定它不会在路径中。在此之后你可以做到
Dim data() As String
data = Split(File.ReadAllText(LogFile.txt), StringSplitOptions.RemoveEmptyEntries)
File.Move(data(1), Path.Combine(MoveLocation , Path.GetFileName(data(1)))
理想情况下,您不应该在计算机上的任何位置存储文件并使用不同的文件夹。