.net-core - FtpWebRequest 不会通过 FTP 删除文件 - 但可以找到文件
问题描述
你好呀。
我在我正在处理的当前脚本中发现了一个问题。
当我尝试使用 FTPWebRequest 从 FTP URI 中删除文件时 - 我遇到了一个错误,它实际上确实找到了文件(检查存在),但是 - 它只是由于某种原因没有删除它。
我可以找到该文件,并通过我的脚本对其进行编辑——没问题;如果被问到,它只是不会触发删除。让我给你一个启动它的 ActionResult 的例子。
if (server.Protocol.Equals("FTP"))
{
Uri serverUri = null;
serverUri = new Uri($"{server.Server}/TheIsle/Saved/Databases/Survival/Players/{dino.SteamId}.json", UriKind.Absolute);
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
throw new FileNotFoundException();
}
var isDeleted = DinosaurWorker.DeleteTextFromFtpURI(config, _context, serverUri, dino);
if (isDeleted)
return Ok();
return Unauthorized();
}
正如您在此处看到的,正在调用 DeleteTextFromFtpURI (isDeleted)
这是 DeleteTextFromFTPURI - 它应该包括:
WebRequestMethods.Ftp.DeleteFile;
internal static bool DeleteTextFromFtpURI(NetworkConnection config, ApplicationDbContext context, Uri serverURI, Dinos dino, string user = "")
{
WebClient request = new WebClient();
request.Credentials = new NetworkCredential(config.Username, config.Password);
try
{
byte[] newFileData = request.DownloadData(serverURI);
string fileString = Encoding.UTF8.GetString(newFileData);
var player = JsonConvert.DeserializeObject<Player>(fileString);
var dinosaurDbName = dino.Dinosaur.GetAttribute<DisplayAttribute>().Name;
if (player.CharacterClass == dinosaurDbName && player.Growth == "1.0")
{
SavePlayer(context, dino, player);
var x = JsonConvert.SerializeObject(player);
var buffer = Encoding.UTF8.GetBytes(x);
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(serverURI);
ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile;
ftpRequest.Credentials = new NetworkCredential(config.Username, config.Password);
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
response.Close();
}
LogAction(context, dino.SteamId, $"Dinosaur: {player.CharacterClass} should have been deleted", user);
return true;
}
catch (Exception e)
{
return false;
}
}
LogAction 完成,我可以在网站日志中看到该文件应该被删除,但是 - 我仍然能够看到该文件。
让我重新表述一下 FTP 连接确实有效,它确实检查文件是否存在 - 它确实通过 ftp 找到了文件,但没有发生删除。
我已经检查了用户文件夹权限,我的网站可以很好地编辑文件。它只是不会删除。
此致。
解决方案
我注意到我自己的代码中有一个关于 WebRequestMethods.Ftp.DeleteFile 的错误;没有放入一个 return false ;在(如果它不符合标准)。
找到解决方案。
推荐阅读
- reactjs - 使用 Antd Table 在 react-beautiful-dnd 中产生奇怪的效果
- hibernate - 关于排序的 JPQL 查询不直接在可分页排序值上采用列名
- netlogo - Netlogo:计算预期利润的内置函数
- java - 如何在tomcat中运行使用高内存的很长的请求?
- python-3.x - "s = "0123456789" print(s[2:-1:-1])" 切片运算符的输出
- sql - 如何将文本文件转换为 SQL 插入语句?
- c - 我的程序试图访问什么内存?因为它的段错误
- angular - 在Angular NGXS中访问数组内的嵌套对象
- reactjs - React:HOC组件内部的触发方法
- android - TransformException:DexArchiveBuilderException:无法处理 \.gradle\caches\transforms-1\files-1.1\play-services-xxx-12.0.1.aar\xxx\classes.jar