首页 > 解决方案 > 如何使用 WinSCP/C# 将文本附加到日志文件

问题描述

我正在尝试将文本添加到 FTP 服务器中的文本文件中,但它会覆盖它而不是附加,如何解决这个问题?

SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    HostName = "www.site.com",
    UserName = "name",
    Password = "pass",
    FtpSecure = FtpSecure.Explicit,

    TlsHostCertificateFingerprint = "what ever that is",
};

using (Session session = new Session())
{
    session.Open(sessionOptions);
    TransferOptions options = new TransferOptions();
    options.TransferMode = TransferMode.Ascii;
    options.OverwriteMode = OverwriteMode.Append;

    TransferOperationResult transferResult;
    transferResult = session.PutFiles(@"E:\Up\log.txt", "/log.txt", false, options);
    transferResult.Check();

    foreach (TransferEventArgs transfer in transferResult.Transfers)
    {
        Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
    }
}

在这里找到了类似的东西,但没有解决方案: https ://winscp.net/forum/viewtopic.php?t=25031

我真的不想下载文件,附加到它,然后上传它,下面的代码有效,但我的凭据对 WireShark 是可见的:

byte[] data = Encoding.UTF8.GetBytes(@"Hello World.");
Uri target = new Uri("ftp://site.com/test.txt");
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(target);
request.Method = WebRequestMethods.Ftp.AppendFile;
request.ContentLength = data.Length;

request.Credentials = new NetworkCredential("name", "pass");
using (Stream requestStream = request.GetRequestStream())
    requestStream.Write(data, 0, data.Length);

标签: c#ftpwinscp-net

解决方案


OverwriteMode.Append仅 SFTP 协议支持WinSCP 。


如果你想使用加密的 FTPS FtpWebRequest,只需设置FtpWebRequest.EnableSsl.
请参阅C# 中的 FTPS(基于 SSL 的 FTP)

此外,正如您TlsHostCertificateFingerprint在 WinSCP 中设置的那样,您的服务器似乎正在使用自签名证书。然后你可能需要这个FtpWebRequest
FtpWebRequest“根据验证过程,远程证书无效”


推荐阅读