Indy TFTP Server Исключение EIdTFTPAllocationExceeded - PullRequest
0 голосов
/ 10 января 2019

Я получаю исключение EIdTFTPAllocationExceeded при передаче файла от меня (сервер - с помощью компонента Indy TIdTrivialFTPServer) на устройство. Я не могу найти никакой информации о том, что может означать это исключение, за исключением, возможно, проблемы с дисковым пространством на клиенте (что, я знаю, не так, потому что, если я передаю файл через другой TFTP-сервер, проблем нет).

  1. Что за исключение пытается мне сказать?
  2. Как мне обойти это?
  3. Есть какой-нибудь код, который я пропускаю?

Код моего TFTP-сервера (все) для сервера:

__fastcall TTrivialFTPServer::TTrivialFTPServer(TComponent* Owner) : TDataModule(Owner)
{
    root = IncludeTrailingPathDelimiter(GetCurrentDir());
}

// ---------------------------------------------------------------------------
void __fastcall TTrivialFTPServer::tftpReadFile(TObject *Sender, UnicodeString &FileName, const TPeerInfo &PeerInfo, bool &GrantAccess, TStream *&AStream, bool &FreeStreamOnComplete)
{
    FreeStreamOnComplete = true;
    FileName = StringReplace(FileName, "/", "\\", TReplaceFlags() << rfReplaceAll);
    FileName = ExtractFileName(FileName);
    if (FileExists(root + "files\\" + FileName, false))
    {
        AStream = new TFileStream(root + "files\\" + FileName, fmOpenRead | fmShareDenyWrite);
        GrantAccess = true;
    }
    else
    {
        GrantAccess = false;
    }
}

1 Ответ

0 голосов
/ 10 января 2019

После долгих поисков и царапин на голове я наконец-то открыл файл IdTrivialFTPServer.pas и обнаружил проблему. Код гласит:

if FBlkCounter = High(UInt16) then begin
    raise EIdTFTPAllocationExceeded.Create('');
end;

Когда я добавил текст в исключение, я получил добавленный текст, так что именно здесь происходит ошибка. Я попытался преобразовать UInt16 в UInt32, но вызвал еще много проблем, поэтому я хотел посмотреть, что произойдет, если я просто закомментирую проверку и позволю счетчику вернуться к нулю.

Как оказалось, вообще ничего плохого не происходит, а файл просто отлично передает!

...