0

我正在编写一个脚本来查看目录,读取文件名并使用文件名的一部分运行 SQL 查询来修改数据库,然后将文件复制到新位置并删除原始文件。

完成此操作后,它会向预定义的电子邮件地址发送电子邮件确认。

我拥有多数,但无法轮询目录并处理可能存在的所有文件。我对这个 VB.net 的东西很陌生,为了让其他东西正常工作,我刚开始就给它命名。

任何帮助将不胜感激。

    Dim fileName As String = "C:\temp\Input\VBTEST1.success"
    Dim pathname As String = "C:\temp\Input\"
    Dim result As String
    Dim sourceDir As String = "C:\temp\Input\"
    Dim processedDir As String = "C:\temp\Input\Processed\"
    Dim fList As String() = Directory.GetFiles(sourceDir, "*.success")
    Dim sqlCommand As SqlCommand

    Public Sub Main()
      result = Path.GetFileName(fileName)

      Console.WriteLine("GetFileName('{0}') returns '{1}'", fileName, result)

      Dim betacell As String = result
      betacell = (result.Remove(7, 8))

      Dim connection As New SqlConnection(My.Settings.connectionString)
      connection.Open()

      Dim updateTransaction As SqlTransaction = connection.BeginTransaction()
      Dim sqlQ As String = "UPDATE " & My.Settings.JobTb & " SET Status = '10'  WHERE  JobNumber ='" & betacell & "'"

      sqlCommand = New SqlCommand(sqlQ, connection, updateTransaction)

      sqlCommand.ExecuteNonQuery()
      updateTransaction.Commit()
      connection.Close()
      SendEmail(My.Settings.emailUsers, "EMAIL TEXT")
      Call MoveFiles()

    End Sub

我现在很高兴,因为 iv 还设法让它查找所有带有 .success 扩展名的文件。现在它处理所有文件,而不是代码中命名的文件。

Module Module1    
Dim sourceDir As String = My.Settings.watchPath
Dim processedDir As String = My.Settings.processedPath

  Private loggerName As String = "EmailReleases"

Public Sub log(ex As Exception)
Console.WriteLine("Error: " & ex.ToString)
End Sub

Public Sub log(ByVal s As String)
Console.WriteLine(DateTime.Now.ToString & " [" & loggerName & "] " & s)
End Sub


Public Sub Main()    
Dim inputFiles As String() = Directory.GetFiles(sourceDir, "*.success")
log("Starting processing of .success files in '" & sourceDir & "' ... ")
If (inputFiles.Length > 0) Then
  Dim connection As New SqlConnection(My.Settings.connectionString)
  connection.Open()
  For Each fileName As String In inputFiles
    Dim sqlCommand As SqlCommand
    Dim fFile As New FileInfo(fileName)
    log(" Processing  " & fFile.Name)
    Dim betacell As String = fFile.Name.Substring(0, fFile.Name.Length - 8)

    'Update Status on Database with the use of the Betacell
    Dim updateTransaction As SqlTransaction = connection.BeginTransaction()
            Dim sqlQ As String = "UPDATE " & My.Settings.JobTb & " SET Status = '10'  WHERE JobNumber ='" & betacell & "'"
    sqlCommand = New SqlCommand(sqlQ, connection, updateTransaction)
    Dim result = sqlCommand.ExecuteNonQuery()

    'Email COnfirmation
    SendEmail(My.Settings.emailUsers, "EMAIL TEXT")
    If (result > 0) Then
      'Move the file
      fFile.MoveTo(processedDir & fFile.Name)
      updateTransaction.Commit() ' make sure to commit only in case moving the file is OK
    Else
      log("ERROR - Betacell '" & betacell & "' not found in database!")
      updateTransaction.Rollback()
    End If
4

1 回答 1

3

与轮询文件夹(即每隔n几秒钟检查它是否有新文件)相比,让操作系统通知您该文件夹中的更改要高效得多。您可以通过创建FileSystemWatcher来做到这一点。MSDN 上有一个例子

但是,如果您确实想轮询一个文件夹,它实际上很简单 - 只需将以下代码包装在Timer中。请注意,我通常用 C# 编写代码,所以如果语法不是 100%,我们深表歉意......

Imports System.IO

....

For Each file as String in Directory.GetFiles("C:\SomeFolder")
    DoSomethingWithFile (file)
Next
于 2012-11-23T10:17:45.270 回答