错误分离130个文件的ftp文件列表 - 使用vb.net

时间:2014-10-21 13:41:00

标签: vb.net ftp aix

所以我有一个运行在Windows服务器上的vb.net应用程序,它有一个ftp类,我们调用它来与我们的unix服务器上的文件进行交互。该应用程序运行良好多年,直到我们开始与大型组(约130个PDF文件)进行交互。当我们试图删除它们时,突然文件名会被切断。

我们在尝试删除文件时遇到的错误" a839084_gaa13-132_tower-j34-aspect-localization-specification-jd345.pdf"

" 550 a839084_gaa13-132_tower-j34-aspect-locali:路径名中的文件或目录不存在。"

下面是我们如何调用它的示例,该函数列在它下面。有关如何改进此代码的任何想法,以便它不再发生?我认为当我们尝试Split()文本时会出现问题。另一个奇怪的是,这个错误并不总是可以重现的。当我在开发服务器上放置相同的文件集时,我没有收到错误。

...

 ' Read the Remote list into an array
  Dim RemList() As String = ftpConnObj.GetFileList("*.pdf")
  Dim i As Object

  'loop through each file in the array and delete the Remote file.
  For Each i In RemList
      If i.ToString.Trim.Length > 0 Then 
          Try
              ftpConnObj.DeleteFile(i.ToString.Trim)
              connMsg = ftpConnObj.MessageString


...

' Return a list of files within a string() array from the
    '  file system.
    Public Function GetFileList(ByVal sMask As String) As String()
        Dim cSocket As Socket
        Dim bytes As Int32
        Dim seperator As Char = ControlChars.Lf
        Dim mess() As String

        m_sMes = ""
        If (Not (m_bLoggedIn)) Then
            Login()
        End If

        cSocket = CreateDataSocket()
        SendCommand("NLST " & sMask)

        If (Not (m_iRetValue = 150 Or m_iRetValue = 125)) Then
            MessageString = m_sReply
            Throw New IOException(m_sReply.Substring(4))
        End If

        m_sMes = ""
        Do While (True)
            Array.Clear(m_aBuffer, 0, m_aBuffer.Length)
              bytes = cSocket.Receive(m_aBuffer, m_aBuffer.Length, 0)
            m_sMes += ASCII.GetString(m_aBuffer, 0, bytes)

            If (bytes < m_aBuffer.Length) Then
                Exit Do
            End If
        Loop

        mess = m_sMes.Split(seperator)
        cSocket.Close()
        ReadReply()

        If (m_iRetValue <> 226) Then
            MessageString = m_sReply
            Throw New IOException(m_sReply.Substring(4))
        End If

        Return mess
    End Function

1 个答案:

答案 0 :(得分:0)

您似乎遇到了Windows强加的260-character path length limit(并且不会影响您的Unix服务器)。

我提到这一点是因为您特别注意到错误在开发环境中是不可重现的(开发环境中通常是本地的,因此不太可能深深嵌套在目录结构中)

您可能需要重命名Unix服务器上的文件,以便在Windows中使用完整路径少于260个字符,然后才能使用此代码对它们执行任何操作。