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的错误;没有放在一个虚假的回报;in(以防不符合标准(。

找到解决方案。

相关内容

最新更新