I face an error when I try to load a contents of a file from FTP to ListBox
.
Form1 (Photo1)
Ftp Home Including All Ftp Server File's (Photo2)
Error issue (Photo3), Error Happen When Press in "Ann File" (Button)
Form1 Code (Form Class)
Imports System.IO
Imports System.Net
Public Class Form1
Dim client As New Net.WebClient
Dim streamreaddder As IO.StreamReader
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
ListBox1.Items.Clear()
Dim ftp As FtpWebRequest =
DirectCast(WebRequest.Create("ftp://Example.com/Ann.txt/"), FtpWebRequest)
ftp.Method = WebRequestMethods.Ftp.ListDirectory
Dim ftpFiles As New ArrayList()
ftp.Credentials = New NetworkCredential("*****", "****")
Dim Response As FtpWebResponse = ftp.GetResponse()
Dim responseStream As Stream = Response.GetResponseStream()
Dim reader = New StreamReader(responseStream)
While Not (reader.EndOfStream)
ftpFiles.Add(reader.ReadLine())
End While
For Each file In ftpFiles
ListBox1.Items.Add(file)
Next
reader.Close()
responseStream.Close()
Response.Close()
End Sub
End Class
Only I want to load my FTP file (Ann.txt
) in my listbox .
Error details:
System.Net.WebException
HResult=0x80131509
Message=The remote server returned an error: (550) File unavailable (e.g., file not found, no access).
Source=System
StackTrace:
at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
at System.Net.FtpWebRequest.RequestCallback(Object obj)
at System.Net.CommandStream.Dispose(Boolean disposing)
at System.IO.Stream.Close()
at System.IO.Stream.Dispose()
at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
at System.Net.FtpWebRequest.GetResponse()
at WindowsApp1.Form1.Button2_Click(Object sender, EventArgs e) in C:\Users\Ahmad\AppData\Local\Temporary Projects\WindowsApp1\Form1.vb:line 72
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
at WindowsApp1.My.MyApplication.Main(String[] Args) in :line 81
To read a file contents, you have to use
DownloadFile
method, notListDirectory
:Also note:
Using
statement;ArrayList()
.Due to crappy implementation of the
Stream
returned by.GetResponseStream
, the code will not work correctly if the last line is not terminated by a new line. Working this around would require much more complicate code. See also StreamReader ReadLine throwing disposed exception rather than returning null (not exactly the same problem, but similar).