Чтение и вывод возможного содержимого торрента Unicode в C ++?

Это должно быть текущее количество активных соединений. Выполните команду processlist, чтобы убедиться.

URL для справки: http://www.devdaily.com/blog/post/mysql/how-show-open-database-connections- mysql

EDIT: Количество открытых соединений DB Пожалуйста, смотрите здесь, здесь описано реальное количество потоков (соединений)!

1
задан Jon 20 June 2010 в 20:36
поделиться

3 ответа

У вас классическая основная ошибка при чтении файла:

while(!File.eof() )
{
    getline(File, Line); // If this line fails (ie you reach EOF)
                         // Then you still print out the Line (whoes value is undefined)

    _tcout << Line << endl;
}

Помните, что предпоследняя строка getline будет читать до (но не включая) EOF. Последний вызов будет читать только EOF. Эта ошибка обычно означает, что указанный выше цикл напечатает последнюю строку дважды (в зависимости от того, как задана строка).

Настоящее решение состоит в том, чтобы на некоторое время включить getline.

while(getline(File, Line))
{
    _tcout << Line << endl;
}

Если getline () читает EOF, он устанавливает флаг в File. Результатом getline () является ссылка на объект потока (File), когда он используется в логическом контексте, он преобразуется в значение, которое можно преобразовать в true, если все в порядке, или false, если что-то пошло не так (например, EOF) . Это будет означать, что тело цикла не будет введено, когда вы достигнете EOF.

Еще вам нужно следить за свойствами терминала и форматом файла. Если есть несоответствие, это будет выглядеть так, как будто отображаемые символы не совпадают ..

1
ответ дан 2 September 2019 в 23:38
поделиться

Используя wifstream , вы обрабатываете файл как UTF-16, что неверно. В спецификации торрента четко сказано, что он работает со строками размером байтов , а не с символами Unicode. У меня создается впечатление, что BT тоже не заботится о наборе символов (кодовой странице), оставляя это на усмотрение клиентской программы. Имена файлов - это просто строки байтов без какого-либо значения.

Торрент-файл не является текстовым файлом, поскольку он содержит двоичные хеш-значения, поэтому попытки прочитать и записать его как текстовый файл - не лучшая идея. Было бы лучше реализовать синтаксический анализатор bencoding , чтобы вы могли преобразовывать хеш-значения в шестнадцатеричные перед их выводом.

1
ответ дан 2 September 2019 в 23:38
поделиться

Как упомянул Нил Мэйхью в своем ответе, трактовка всего файла .torrent как текста не имеет особого смысла, поскольку он содержит двоичные данные.

Вам следует пересмотреть следующие моменты:

  • Не используйте потоки широких символов, так как размер файла не может быть кратным sizeof (wchar_t) . В этом случае
  • read () предпочтительнее, чем getline () , поскольку файлы .torrent не используют строковый текстовый формат.
  • Используйте флаг ios :: binary при открытии файла, иначе вы получите нежелательное преобразование конца строки (это происходит в Windows)
  • Вам также следует переключить cout в двоичный режим по той же причине.
0
ответ дан 2 September 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: