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

分离130个文件的ftp文件列表时出错-使用vb.net,vb.net,ftp,aix,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-aspe

因此,我有一个运行在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:路径名中的文件或目录不存在

下面是我们如何调用它的示例,下面列出了函数。你知道如何改进这段代码,使它不再出现吗?我认为当我们试图拆分文本时,问题就显现出来了。另一件奇怪的事情是,这个错误并不总是可重复产生的。当我把同一组文件放在开发服务器上时,我没有得到错误

...

 ' 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

看起来您遇到了Windows强加的问题,这不会影响您的Unix服务器

我之所以提到这一点,是因为您需要特别注意,错误在开发环境中是不可再现的,开发环境通常是开发人员机器的本地环境,因此不太可能深入嵌套在目录结构中


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

我认为我没有达到极限,因为我的文件路径只有52个字符,最大文件名是75个字符。-此外,我应该指出,我们的开发服务器与生产服务器具有相同的路径结构,并且应用程序在开发时运行良好。最后,问题出在较低级别级别代码,我必须加上几毫秒的睡眠时间才能让它工作。