【问题标题】:How to append text to a log file with WinSCP/C#如何使用 WinSCP/C# 将文本附加到日志文件
【发布时间】:2021-11-02 05:24:25
【问题描述】:

我正在尝试将文本添加到 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# ftp winscp-net


    【解决方案1】:

    您没有附加文本。试试这个。

    System.IO.StreamWriter sw;
    sw = System.IO.File.AppendText(LogFilePath);
    sw.WriteLine("Write Something");
    sw.Close();
    

    【讨论】:

    • 我真的不想下载文件,附加到它,然后上传它,下面的代码有效,但我的凭据对 WireShark 可见:c# 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);
    • 那我建议你尽可能使用SFTP协议。 SharpSSH 可以做 SFTP。这可能会解决您在 WireShark 中的凭据可见性问题。
    • SharpSSH 是死项目,不要使用它。
    • 改用这个:github.com/sshnet/SSH.NET
    • @KhaledMdTuhidulHossain 我的 FTP 服务器不允许 SFTP(端口 22),只有 FTP/FTPS(端口 21)。
    【解决方案2】:

    WinSCP OverwriteMode.Append 仅支持 SFTP 协议。


    如果您想通过FtpWebRequest 使用加密的FTPS,只需设置FtpWebRequest.EnableSsl
    FTPS (FTP over SSL) in C#

    另外,当您在 WinSCP 中设置 TlsHostCertificateFingerprint 时,您的服务器似乎正在使用自签名证书。那么你可能需要FtpWebRequest:
    FtpWebRequest "The remote certificate is invalid according to the validation procedure"

    【讨论】:

    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2011-01-28
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    相关资源
    最近更新 更多