Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用VB将文件移动到新文件夹中_Vb.net - Fatal编程技术网

Vb.net 使用VB将文件移动到新文件夹中

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

我有一个日志文件,它在每次创建时都保留*.docx扩展名的完整路径。问题是我不知道如何从完整路径中分割文件名。在移动它之前,我可以选择使用CheckedListBox创建的路径,并将其移动到目标文件夹

例如,在我存储的日志文件中(已创建文件:
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中的完整路径?