[Delphi, Socket] Портится файл при передаче

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by dreamcation, 19 Jul 2010.

  1. Artist

    Artist Member

    Joined:
    10 Jul 2010
    Messages:
    89
    Likes Received:
    5
    Reputations:
    0
    Даже не знаю я компилировал на delphi 2007 и все нормально было....
     
  2. dreamcation

    dreamcation New Member

    Joined:
    2 Apr 2010
    Messages:
    75
    Likes Received:
    0
    Reputations:
    0
    я понимаю, ибо в нете столько примеров с подобной реализацией, не может быть что бы везде была ошибка, видимо это некая особенность Delphi 2010 или я чего то не досмотрел... даже не знаю что и делать, сегодня весь день пытаюсь этот вопрос решить, пока безрезультатно(
     
  3. Voland-791

    Voland-791 Member

    Joined:
    1 May 2009
    Messages:
    163
    Likes Received:
    13
    Reputations:
    5
    поставь delphi 2007
     
  4. dreamcation

    dreamcation New Member

    Joined:
    2 Apr 2010
    Messages:
    75
    Likes Received:
    0
    Reputations:
    0
    а в Delphi 2007 еще какая нибудь ошибка всплывет, тогда посоветуешь перейти дальше, на Delphi 7, etc... Delphi 7 конечно хорошая вещь, но начиная с этого проекта я перешел на Delphi 2010 и надо решать вопрос в данном контексте. Уверен, решение есть. Буду очень признателен тому кто поможет его отыскать.
     
  5. dreamcation

    dreamcation New Member

    Joined:
    2 Apr 2010
    Messages:
    75
    Likes Received:
    0
    Reputations:
    0
    Нашел кое-что по этому поводу.
    "В D2010 нужно учитывать, что по умолчанию string=WideString, посему
    для преобразования TStream>string НАСТОЯТЕЛЬНО РЕКОМЕНДУЕТСЯ
    пользоваться функцией StreamToString."
    Code:
    function StreamToString(Stream: TStream): string;
    var
      i: integer;
    begin
      i := Stream.Size;
      SetLength(Result, i div SizeOf(Char));
      if i > 0 then
        Stream.Read(Result[1], i);
    end;
    После использования этой функции в программе я уже не получаю "H e l l o , " а получаю "Hello," но куда при передаче пропадает " world" ? Возможно подобную функцию надо применять перед отправкой данных?
     
  6. dreamcation

    dreamcation New Member

    Joined:
    2 Apr 2010
    Messages:
    75
    Likes Received:
    0
    Reputations:
    0
    Разобрался. Данная проблема характера для D2009 и D2010. Для корректной передачи необходимо изменить тип аргумента функции Writing со String на AnsiString.
    Code:
    procedure TForm1.Writing(Text: AnsiString);