【发布时间】:2020-06-26 17:31:51
【问题描述】:
我正在编写的软件正在计算机上安装的服务中运行。 我想读取一个文本文件,对其进行处理,并将其编码到不同的路径。
该软件正在做它应该做的事情,但它只处理 2 个文件并且它停止了。我相信这与 for each 循环有关。我在网上找到了一些信息,说它与分配给每个循环的每个循环的内存量有关。
感谢任何帮助。
我的代码是这样的。
For Each foundFile As String In My.Computer.FileSystem.GetFiles("C:\Commsin\", FileIO.SearchOption.SearchTopLevelOnly, "ORDER-*.TXT")
Dim filenum As Integer
filenum = FreeFile()
FileOpen(filenum, foundFile, OpenMode.Input)
While Not EOF(filenum)
<do a bunch of stuff>
End While
<more code>
Dim arrayFileName() As String = GetFileName.Split("\")
Dim FileName As String = arrayFileName(2)
My.Computer.FileSystem.CopyFile(foundFile, "C:\Commsin\Done\" & FileName)
If IO.File.Exists("C:\Commsin\Done\" & FileName) Then
My.Computer.FileSystem.DeleteFile(foundFile, Microsoft.VisualBasic.FileIO.UIOption.AllDialogs, Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin)
NoOfOrders -= NoOfOrders
End If
Next
【问题讨论】:
-
[vba] 标签已移除。 VBA 和 VB.NET 是完全不同的语言。除了语法上的表面相似之外,它们没有任何共同之处。
-
你相信这是循环吗?您是否尝试过调试应用程序?如果至少有某种错误消息,则有助于找到解决方案。
-
我收到此错误“索引超出了数组的范围。”在事件查看器中。然后因为它的服务每 5 分钟循环一次,所以我收到此消息,然后“该进程无法访问文件 'C:\Commsin\ORDER-1009.TXT',因为它正被另一个进程使用。”
-
对于第二条消息,您应该始终将文件修改操作包装在 try-catch 中,因为它们可能会由于无法实时检测到的其他进程的访问而失败(或者即使它们可以,在检测和尝试执行操作之间仍有一个竞争窗口)。