我在使用一段非常简单的代码时遇到了一些问题:
private long getFTPLogLength()
{
long size;
FtpWebRequest ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURL));
ftpRequest.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
try
{
ftpRequest.ReadWriteTimeout = 6000;
ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize;
FtpWebResponse respSize = (FtpWebResponse)ftpRequest.GetResponse();
size = respSize.ContentLength;
respSize.Close();
}
catch (Exception ex)
{
logLog.writeEntry(4, "Error getting logsize from FTP: " + ex.Message);
size = 0;
}
return size;
}
这种方法的重点显然是抓取特定文件的长度。这里的问题是,在某些服务器(即 gameservers.com 服务器)上,此代码不起作用。它适用于我可以测试的所有其他服务器类型。
我在寻求帮助时确实发现了这一点:C# FTP 550 错误,我尝试了一个斜杠和两个,但仍然得到相同的结果。为了更进一步,我只在执行 GetFileSize (SIZE) 时收到 550 错误。如果我执行 GetDateTime (MDTM),它不会抛出此错误。这会让您相信 SIZE 命令已被禁用,或者我无权使用它,但是如果我使用 FileZilla(或任何客户端)连接到服务器,并运行 SIZE games_mp.log 它工作得很好。
这是异常后调试器的屏幕截图(注意,我购买此游戏服务器的目的就是为了修复此错误,因此故意保留凭据以供您进行测试)。
任何可以帮助我弄清楚我需要做什么才能使其与他们的服务器一起工作的信息都会有所帮助。希望我错过了一些简单的东西。:)
经过更多测试后,如果我让 FileZilla 超时,我手动运行命令,我收到一个错误,关于 SIZE 在 ASCII 模式下不受支持,但如果我开始与服务器建立新连接,它就可以正常工作。
与服务器的新连接:
超时后的命令:
希望这对某人意味着什么....