从FTP获取文件大小(在SSI中,使用DTS.Connections)



我有一个问题,将大文件发送到FTP站点,我想检查传输后的文件大小(有时有时起作用有时会失败(。转移在SSI中,我正在使用dts.connections c#

中的连接

我的代码:

public long TransferFile(string file)
{
    long filesize = 0L;
    try
    {
        string[] newfile = new[] { file };
        ConnectionManager ftpCM = Dts.Connections["ftp_server"];
        string remoteDir = Dts.Variables["FtpWorkingDirectory"].Value.ToString();
        FtpClientConnection ftpClient = new FtpClientConnection(ftpCM.AcquireConnection(null));
        ftpClient.UsePassiveMode = true;
        ftpClient.Connect();
        ftpClient.Retries = 10;
        ftpClient.SetWorkingDirectory(remoteDir);
        ftpClient.SendFiles(newfile, remoteDir, true, false);
        ftpClient.Close();
    }
    catch (Exception ex)
    {
        throw ex;
    }
    return filesize;
}

我使用ftpwebrequest找到了示例,但是我没有FTP URI可用,因此我看不到如何使用此方法。我该如何获取此文件大小?

更新:添加此:

        FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpCM.ConnectionString + remoteDir + "/" + file));
        request.Proxy = null;
        DtsProperty ServerUsername = ftpCM.Properties["ServerUserName"];
        DtsProperty ServerPassword = ftpCM.Properties["ServerPassword"];
        request.Credentials = new NetworkCredential(ServerUsername.GetValue(ftpCM).ToString(), ServerPassword.GetValue(ftpCM).ToString());
        request.Method = WebRequestMethods.Ftp.GetFileSize;
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        filesize = response.ContentLength;
        response.Close();

我获得错误:属性服务器Passsword仅写入。

最终解决方案是将用户名和密码存储在变量而不是连接参数中。

以及以下代码:

public long TransferFile(string file)
{
    long filesize = 0L;
    try
    {
        string[] newfile = new[] { file };
        ConnectionManager ftpCM = Dts.Connections["ftp_server"];
        string remoteDir = Dts.Variables["FtpWorkingDirectory"].Value.ToString();
        string ServerUsername = Dts.Variables["ServerUsername"].Value.ToString();
        string ServerPassword = Dts.Variables["ServerPassword"].Value.ToString();
        FtpClientConnection ftpClient = new FtpClientConnection(ftpCM.AcquireConnection(null));
        ftpClient.UsePassiveMode = true;
        ftpClient.ServerUserName = ServerUsername;
        ftpClient.ServerPassword = ServerPassword;
        ftpClient.Connect();
        ftpClient.Retries = 10;
        ftpClient.SetWorkingDirectory(remoteDir);
        ftpClient.SendFiles(newfile, remoteDir, true, false);
        ftpClient.Close();
        FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpCM.ConnectionString + remoteDir + "/" + Path.GetFileName(file)));
        request.Proxy = null;
        request.Credentials = new NetworkCredential(ServerUsername, ServerPassword);
        request.Method = WebRequestMethods.Ftp.GetFileSize;
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        filesize = response.ContentLength;
        response.Close();
    }
    catch (Exception ex)
    {
        throw ex;
    }
    return filesize;
}

相关内容

  • 没有找到相关文章

最新更新