0

私のasp.netアプリケーションから、基本的にいくつかのファイルをメインフレームにFTPで転送するバッチジョブを呼び出しています。しかし、FTPコードを返すことができません。ファイルが正常に送信されたかどうかを知るために、FTPコードが必要ですか?StandardOutputでは、実行したコマンドのみを取得し、多くの情報は取得しません。コードについては、以下を参照してください。参考までに、後で確認するためにGETを使用する方法はありません。確認したかったのですが、これは不可能だと言われています。

    ProcessStartInfo ProcessInfo;
    Process process;
    string output = string.Empty;
    string error = string.Empty;
    ProcessResult item = new ProcessResult();

    ProcessInfo = new ProcessStartInfo("cmd.exe", "/c" +

        "ftp -n -s:myftpsettings.txt FTP.SERVER.XFHG39"

    ProcessInfo.CreateNoWindow = true;
    ProcessInfo.UseShellExecute = false;
    ProcessInfo.RedirectStandardError = true;
    ProcessInfo.RedirectStandardOutput = true;

    process = Process.Start(ProcessInfo);
    process.WaitForExit();

    output = process.StandardOutput.ReadToEnd();
    error = process.StandardError.ReadToEnd();
    ExitCode = process.ExitCode;
    process.Close();

    FTP Settings
    user *******
    ********
    QUOTE SITE LRECL=80 RECFM=FB CY PRI=100 SEC=10
    BIN
    PUT MYFILE 'NewName'
    QUIT
4

1 に答える 1

0

このために外部実行可能ファイルを起動せず、代わりにSystem.Netのクラスを使用して、FtpStatusCode列挙を返すことを検討しましたか?

    private static FtpWebRequest CreateFtpWebRequest(string ftpUrl, string userName, string password, bool useSsl, bool allowInvalidCertificate, bool useActiveFtp)
    {
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl);
        request.Credentials = new NetworkCredential(userName, password);

        if (useSsl)
        {
            request.EnableSsl = true;

            if (allowInvalidCertificate)
            {
                ServicePointManager.ServerCertificateValidationCallback = ServicePointManager_ServerCertificateValidationCallback;
            }
            else
            {
                ServicePointManager.ServerCertificateValidationCallback = null;
            }
        }

        request.UsePassive = !useActiveFtp;

        return request;
    }

    private static FtpStatusCode UploadFileToServer(string ftpUrl, string userName, string password, bool useSsl, bool allowInvalidCertificate, bool useActiveFtp, string filePath)
    {
        FtpWebRequest request = CreateFtpWebRequest(ftpUrl, userName, password, useSsl, allowInvalidCertificate, useActiveFtp);

        request.Method = WebRequestMethods.Ftp.UploadFile;

        long bytesReceived = 0;
        long bytesSent = 0;
        FtpStatusCode statusCode = FtpStatusCode.Undefined;

        using (Stream requestStream = request.GetRequestStream())
        using (FileStream uploadFileStream = File.OpenRead(filePath))
        {
            // Note that this method call requires .NET 4.0 or higher. If using an earlier version it will need to be replaced.
            uploadFileStream.CopyTo(requestStream);
            bytesSent = uploadFileStream.Position;
        }

        using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
        {
            bytesReceived = response.ContentLength;
            statusCode = response.StatusCode;
        }

        return statusCode;
    }

ftpのURLは。のようになることに注意してくださいftp://ftphost.com/ftpdirectory/textfile.txt

于 2012-05-16T20:46:33.703 に答える