2015-06-02 4 views
0

У меня небольшая проблема с моим FTP-клиентом.
Выбор файла работает, переименование этого файла с 4 переменными работает.
Это загрузка, которая вызывает у меня проблемы. Всякий раз, когда файл загружается на FTP-сервер, он говорит, что он равен 0 КБ.FTP-клиент загружает только 0KB-файлы

Я имею в виду 2 возможных проблем:

Visual Studio говорит мне, что переменная file используется до того, как было присвоено значение, чтобы убедиться, что он не пустой я сделал следующее.

Dim file As Byte() 

If (Not file Is Nothing) Then 
      strz.Write(file, 0, file.Length) 
      strz.Close() 
      strz.Dispose() 
      FileSystem.Rename(Filename, originalFile) 
     End If 

Это берет на себя заботу о любых возможных ошибках.

Второй - это fName, то же предупреждение, что и файл, и я позаботился об этом таким же образом.

другая возможность, что мой код просто берет 4 переменные и делает это в файл и загружает его, следовательно, размер 0KB ....

Вот мой код:

Dim Filename As String 
    Dim originalFile As String 

    Private Function enumerateCheckboxes(ByVal path As String) 
     originalFile = path 
     Dim fName As String 
     For Each Control In Me.Controls 
      If (TypeOf Control Is ComboBox AndAlso DirectCast(Control, ComboBox).SelectedIndex > -1) Then 
       fName += CStr(Control.SelectedItem.Key) + "_" 
      End If 
     Next 
     Try 
      fName = path + fName.Substring(0, fName.Length - 1) + ".jpg" 
     Catch ex As Exception 
      MsgBox(ex.Message) 
      MsgBox("Stack Trace: " & vbCrLf & ex.StackTrace) 
     End Try 
     Return fName 
    End Function 

    Public Function OpenDialog() 
     Dim FD As OpenFileDialog = New OpenFileDialog() 

     FD.Title = "Selecteer een bestand" 
     FD.InitialDirectory = "C:\" 
     FD.Filter = "All files (*.*)|*.*|All files (*.*)|*.*" 
     FD.FilterIndex = 2 
     FD.RestoreDirectory = True 

     If FD.ShowDialog() = DialogResult.OK Then 
      Dim Filename As String = FD.FileName 
      Filename = StrReverse(Filename) 
      Filename = Mid(Filename, InStr(Filename, "\"), Len(Filename)) 
      Filename = StrReverse(Filename) 
      MsgBox(enumerateCheckboxes(Filename)) 
     End If 
    End Function 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

     Dim request As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("ip" & enumerateCheckboxes(Filename)), System.Net.FtpWebRequest) 
     request.Credentials = New System.Net.NetworkCredential("username", "password") 
     request.Method = System.Net.WebRequestMethods.Ftp.UploadFile 

     Dim file() As Byte 

     Try 
      Filename = OpenDialog() 
      If (Not Filename Is Nothing) Then 
       System.IO.File.ReadAllBytes(Filename) 
      End If 
     Catch ex As Exception 
      MessageBox.Show(ex.Message) 
      MessageBox.Show("Stack Trace: " & vbCrLf & ex.StackTrace) 
     End Try 
     If (Not Filename Is Nothing) Then 
      FileSystem.Rename(originalFile, Filename) 
     End If 
     Dim strz As System.IO.Stream = request.GetRequestStream() 
     If (Not file Is Nothing) Then 
      strz.Write(file, 0, file.Length) 
      strz.Close() 
      strz.Dispose() 
      FileSystem.Rename(Filename, originalFile) 
     End If 
    End Sub 
End Class 

У меня есть посмотрел на несколько потоков с той же проблемой, что и я.
Темы как this Но я не верю, что это относится к моей проблеме. Если бы вы были так добры, чтобы объяснить, что я сделал не так, и как я могу исправить и избежать этого в будущем, моя отладка все еще немного грубо ...

Спасибо заранее!

ответ

2

Visual Studio дает вам это предупреждение, потому что вы никогда ничего не присваиваете массиву file. Я думаю, что на линии, где у вас есть:

System.IO.File.ReadAllBytes(Filename) 

Вы действительно означало иметь:

file = System.IO.File.ReadAllBytes(Filename) 
+0

Оке, я вижу, где я пошел не так, но .. Файлы, которые загружаются на мой сервер все еще 0Kb – MalumAtire832

+0

Я думаю, вам также нужно вызвать 'request.GetResponse()' перед удалением потока. – pmcoltrane