Mingw и _stati64()

#c #mingw

#c #mingw

Вопрос:

Я использую _stati64() в своем файловом менеджере, чтобы я мог получить размер файлов более 4 ГБ.

Мой код выглядит нормально:

 struct _stati64 buf;
_stati64(ep->d_name, amp;buf);
  

Дело в том, что иногда _stati64 работает должным образом, иногда я получаю огромные значения. Я даже проверил с помощью gdb, выполнив print buf и все еще получаю неверные значения, так что проблема, похоже, не в моем коде.
Кто-нибудь испытывал нечто подобное?

Комментарии:

1. Показать весь код. (и убедитесь, что ваш _stati64 () не выходит из строя)

2.Вы получаете неверные значения для чего? Какие значения являются неправильными и каковы фактические значения, которые вы получаете?

3. Неважно, я обнаружил проблему сразу после публикации (и я потратил 1 час на ее поиски). Проблема заключалась в моем коде, а не в функции _stati64, я скопировал ее из другой части кода и передал неправильный путь :/

Ответ №1:

Вам нужно проверить возвращаемое значение _stati64 . Если оно не равно 0, вы не получите действительных результатов.

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

Последняя возможность заключается в том, что «неправильные значения», которые вы получаете, на самом деле являются действительными и хорошими значениями. Я обновлю свой ответ, если вы обновите вопрос, указав, какие значения вы получаете.

Комментарии:

1. Да, это было так, я не стал проверять наличие ошибок, потому что я просто заменил обычный stat() на _stati64, и при этом я использовал неправильную переменную для path :/ Это действительно расстраивает, когда вы находите ответ на проблему сразу после публикации, хотя вы можете потратить час, прежде чем пытаться выяснить, что не так 🙂