Eine erste chance Ausnahme des Typs “System.ArgumentException" aufgetreten in mscorlib.dll
try
{
FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp path");
req.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
using (var resp = (FtpWebResponse)req.GetResponse())
{
Console.WriteLine(resp.WelcomeMessage);
}
FtpWebResponse res = (FtpWebResponse)req.GetResponse();
Stream rs = res.GetResponseStream();
StreamReader read1 = new StreamReader(res.GetResponseStream());//prob A
Console.WriteLine(read1.ReadToEnd());
Console.WriteLine("Directory is compleate,status(0)",
res.StatusDescription);
read1.Close();
rs.Close();
}
catch (Exception e1)
{
Console.WriteLine(e1.Message);
}
Ich versuche, Zugriff auf ftp-server über C#.
Jedoch, der code-Fehler mit einer Ausnahme:
A first chance exception of type "System.ArgumentException" occured in mscorlib.dll. Stream was not readable.
Jede Hilfe wird geschätzt.
Erstes problem - Sie fordern
Sie haben schon bekommen die Antwort mit using(var resp = ...)?
Danke Scheien. Es bekam. 🙂
Toll, bin froh, dass ich helfen konnte.
GetResponseStream()
zweimal - warum? Nächste: zeigt die gesamte stack-trace an, nicht nur die Nachricht. Wir wissen nicht, wo es herkommt.Sie haben schon bekommen die Antwort mit using(var resp = ...)?
Danke Scheien. Es bekam. 🙂
Toll, bin froh, dass ich helfen konnte.
InformationsquelleAutor biz00ka | 2014-02-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Setzen alle
IDisposable
Ressourcen innerhalbusing(...) {...}
. Dass die Technik verhindertRessource undicht/geschlossen-Ressourcen aufrufen:
Es ist ein sehr möglicher Grund: Sie haben geöffnet-Reaktion in den mit() und .Net geschlossen wird es auf diesem block zu verlassen (es ist also entsorgt). Als Nächstes werden Sie versuchen, um erneut eine Antwort (ist zu entsorgen). Da die Reaktion entsorgt wird, können Sie nicht erhalten, einen Stream zu Lesen
InformationsquelleAutor Dmitry Bychenko
TLDR; der Zustand Der
FtpWebResponse
Objekt entsorgt wird, daher können Sie die Antwort Lesen stream. Der stream wird geschlossen.Demontage von FtpWebResponse:
Der Grund, bekommen Sie die Ausnahme, ist, dass Sie Lesen die Antwort:
und auf der nächsten Zeile, die Sie versuchen zu Lesen, die Antwort noch einmal, in eine andere variable:
res
In diesem Abschnitt machen Sie auch einen Aufruf an die
res.GetResponseStream()
zweimal, aber das spielt keine Rolle in Bezug auf die Fehler auftreten. Der Fehler wird auftreten, selbst wenn Sie es zu ändern:Oder:
Den Grund, dass der Fehler Auftritt, ist der Zustand der
FtpWebResponse
Objekt, das angeordnet ist; und hat denStatusCode = ClosingData
. Wenn ich versuche zu Lesen, den Strom in diesem Zustand bekomme ich die Fehlermeldung, die Sie erleben. In der using-block vor, derStatusCode = OpeningData
.Jedoch, wenn Sie ändern Sie einfach ein paar Zeilen an:
Wenn man sich in dieses über scope, die
StatusCode = OpeningData
, und Strom ist vorhanden und lesbar. Beim verlassen des Bereichs, derStatusCode = ClosingData
, und der stream wird nicht lesbar sein.Hoffe, dass dies Sinn macht, und korrigieren Sie mich, wenn ich falsch bin. 🙂
Mit diesen kleinen änderungen wird sich der code wie erwartet ausgeführt. Allerdings sollten Sie schauen, in die Muster @DmitryBychenko schlägt. So haben Sie Zugriff auf die Ressourcen in dem Umfang, wie Sie benötigt werden, und danach entsorgt.
InformationsquelleAutor scheien