Vb.net 使用VB将文件移动到新文件夹中
我有一个日志文件,它在每次创建时都保留*.docx扩展名的完整路径。问题是我不知道如何从完整路径中分割文件名。在移动它之前,我可以选择使用CheckedListBox创建的路径,并将其移动到目标文件夹 例如,在我存储的日志文件中(已创建文件:Vb.net 使用VB将文件移动到新文件夹中,vb.net,Vb.net,我有一个日志文件,它在每次创建时都保留*.docx扩展名的完整路径。问题是我不知道如何从完整路径中分割文件名。在移动它之前,我可以选择使用CheckedListBox创建的路径,并将其移动到目标文件夹 例如,在我存储的日志文件中(已创建文件:C:\Users\AsrahLim\Desktop\New Microsoft Word Document.docx),我只需要文件名“New Microsoft Word Document.docx”并将其移动到新文件夹 这是我的目标文件夹:C:\User
C:\Users\AsrahLim\Desktop\New Microsoft Word Document.docx
),我只需要文件名“New Microsoft Word Document.docx”并将其移动到新文件夹
这是我的目标文件夹:C:\Users\AsrahLim\googledrive
。下面是我的代码
Imports System.IO
公开课表格1
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
CheckedListBox1.Items.Add(“全选/取消全选”)
CheckedListBox1.CheckOnClick=True
Dim文件\u名称为String=“C:\Users\AsrahLim\Desktop\LogFile.txt”
如果System.IO.File.Exists(文件名),则
Dim objReader作为新System.IO.StreamReader(文件名)
Do While objReader.Peek()-1
CheckedListBox1.Items.Add(objReader.ReadLine())
btnSave.Enabled=True
环
其他的
Show(“文件不存在”)
关闭()
如果结束
端接头
私有子btnSave\u单击(发件人作为System.Object,e作为System.EventArgs)处理btnSave。单击
如果CheckedListBox1.CheckedItems.Count为0,则
对于i As Integer=0的CheckedListBox1.CheckedItems.Count-1
将SourcePath设置为字符串=CheckedListBox1.SelectedItem
Dim MoveLocation As String=“C:\Users\AsrahLim\Google Drive”
SourcePath=SourcePath.Substring(SourcePath.LastIndexOf(“-”)+1)
如果File.Exists(SourcePath)=True,则
File.Move(源路径、移动位置)
MsgBox(“文件移动”)
其他的
MsgBox(“文件不移动”)
如果结束
下一个
如果结束
端接头
私有子btnCancel\u单击(发件人作为System.Object,e作为System.EventArgs)处理btnCancel。单击
关闭()
端接头
末级
不要尝试实现自己的路径操作逻辑。改用System.IO中的共享
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
旁注:我不喜欢这样的语句:如果File.Exists(SourcePath)=True,那么。通常人们认为If语句需要进行比较。事实并非如此。它只需要一个布尔表达式,即返回True
或False
的表达式File.Exists(SourcePath)
是一个表达式,它正是这样做的。附加的=True
不会改变任何东西,而且是多余的,因为如果File.Exists(SourcePath)
返回True
,那么True=True
就是True
,如果File.Exists(SourcePath)
返回False
,那么False=True
就是False
=True
是一种中性操作,与数字的*1
一样。你没有说Foo(1*x)
,你只是说Foo(x)
在你的日志中非常简单,你可以用分隔符存储,例如:
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)))
理想情况下,您不应在计算机上的任何位置存储文件,而应使用不同的文件夹。请仅插入与问题相关的代码。是否有错误?什么事happening@BobSki是的,我在这部分中没有得到错误,它说“当文件已经存在时无法创建文件。”:如果file.exists(SourcePath)=True,那么file.Move(SourcePath,MoveLocation)MsgBox(“文件已移动”)或者MsgBox(“文件未移动”)End IfSo从要首先移动文件的文件夹中删除文件,然后再移动它。我在我的一个项目中做了类似的事情-但我首先检查该文件是否不在您要复制它的文件夹中,如果是,我将其删除,然后将其移动。@halfer很抱歉,但我仍然不习惯这样做。我以后会避免这样做。我认为错误可能是您没有实现他从前面有文本的文件中读取路径。因此,这就是为什么我建议采用拆分的方法来解决这个问题。File.Move(SourcePath,MoveLocation)
-我在这部分遇到了错误(“当该文件已经存在时无法创建文件”),它应该是File.Move(SourcePath,destinationPath)
,而不是File.Move(SourcePath,MoveLocation)
,也就是说,您必须指定目标的路径和文件名,而不仅仅是路径,否则它会尝试创建一个名为“指定文件夹”的文件。我在回答中更正了它。File.Move(SourcePath,destinationPath)
这是工作。感谢u@OlivierJacot-还有一个问题。移动文件后,如何删除LogFile.txt中的完整路径?