문제

C#에서 FTP 유틸리티 클래스를 구축하고 있습니다. 그 경우 a WebException 전화로 던져집니다 FtpWebRequest.GetResponse(), 내 경우에는 원격 서버에 존재하지 않는 요청 된 파일에 대한 예외가 발생합니다. FtpWebResponse 변수는 범위를 벗어났습니다.

그러나 외부의 변수를 선언하더라도 try..catch 블록 나는 "할당되지 않은 로컬 변수 '응답'의 사용"이라는 컴파일 오류가 발생하지만, 말할 수있는 한, 당신이 FtpWebRequest.GetResponse() 방법.

누군가가 조언 할 수 있습니까, 아니면 내가 명백한 것을 놓치고 있습니까?

감사!

내 현재 방법은 다음과 같습니다.

private void Download(string ftpServer, string ftpPath, string ftpFileName, string localPath, 
                           string localFileName, string ftpUserID, string ftpPassword)
    {
        FtpWebRequest reqFTP;
        FtpWebResponse response;
        try
        {
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://"
               + ftpServer + "/" + ftpPath + "/" + ftpFileName));
            reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
            reqFTP.UseBinary = true;
            reqFTP.Credentials = new NetworkCredential(ftpUserID,
                                                       ftpPassword);

            /* HERE IS WHERE THE EXCEPTION IS THROWN FOR FILE NOT AVAILABLE*/
            response = (FtpWebResponse)reqFTP.GetResponse();
            Stream ftpStream = response.GetResponseStream();


            FileStream outputStream = new FileStream(localPath + "\\" +
               localFileName, FileMode.Create);

            long cl = response.ContentLength;
            int bufferSize = 2048;
            int readCount;
            byte[] buffer = new byte[bufferSize];

            readCount = ftpStream.Read(buffer, 0, bufferSize);
            while (readCount > 0)
            {
                outputStream.Write(buffer, 0, readCount);
                readCount = ftpStream.Read(buffer, 0, bufferSize);
            }

            ftpStream.Close();
            outputStream.Close();
            response.Close();
        }
        catch (WebException webex)
        {
            /*HERE THE response VARIABLE IS UNASSIGNED*/
            if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) { 
                //do something
            }
        }
도움이 되었습니까?

해결책

이것을 해결하는 일반적인 방법으로 할당하십시오 null 먼저 응답에 캐치 블록을 확인하십시오. null.

    FtpWebResponse response = null;
    try
    {
...
    }
    catch (WebException webex)
    {
        if ((response != null) && (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)) { 
            //do something
        }
    }

그러나이 특정 경우에 필요한 모든 속성이 있습니다. WebException 인스턴스 (포함 서버 응답)!

다른 팁

문제에 대한 올바른 해결책은이 질문에서 찾을 수 있습니다.
ftpwebrequest 전에 FTP에 파일이 있는지 확인하는 방법

요컨대 :
'응답'변수는 오류로 인해 항상 무효입니다. 상태 코드를 얻으려면 'webex.response'(캐스트)에서 ftpwebresponse를 테스트해야합니다.

항상 변수를 할당 할 수 있습니다.

FtpWebRequest reqFTP = null;
FtpWebResponse response = null;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top