c# - 如何使用 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);
解决方案
OverwriteMode.Append
仅 SFTP 协议支持WinSCP 。
如果你想使用加密的 FTPS FtpWebRequest
,只需设置FtpWebRequest.EnableSsl
.
请参阅C# 中的 FTPS(基于 SSL 的 FTP)。
此外,正如您TlsHostCertificateFingerprint
在 WinSCP 中设置的那样,您的服务器似乎正在使用自签名证书。然后你可能需要这个FtpWebRequest
:
FtpWebRequest“根据验证过程,远程证书无效”
推荐阅读
- css - 固定列数,从上到下从左到右排序
- msbuild - 可以在自定义解决方案文件上调用 MSBuild 吗?
- javascript - 如何动态修复多个文件附件问题
- sql - 基于某些场景的搜索
- c# - 您可以将加载的(动态)程序集导出到 dll/exe 文件中吗?
- python - 我怎样才能拥有 BST 日期时间对象?
- c - 这种基本的二叉搜索树算法会导致分段错误:11 错误
- python-3.x - 如何修复“OSError:[WinError 193] %1 不是有效的 Win32 应用程序”
- java - 在 Kotlin 中自动装配
- service - 限制用户只能访问命名空间中的一项服务