|
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
|
||||||
Некоторые проблемы с файлами07.08.2011, 18:58. Показов 2983. Ответов 25
Метки нет (Все метки)
Категорически приветствую.
У меня возникла пара проблем с файлами. Я делаю лаунчер для одной программки (официальный лаунчер идет через браузер, что не есть хорошо для моего сервера) на консольке. Вроде все было нормально, до того как я решил сделать проверку на версию клиента. В общем, сначала я хотел сделать при помощи сравнивания размеров файлов, но не где не смог найти внятной информации об этом. Затем, я решил сделать инициализацию при помощи строки в файле конфигураций. Ну мол если она отсутствует, то спрашиваем у пользователя версию, ну а если есть уже эта строка, то уже читаем и сравниваем с актуальной версией. Тут я опять получил прокол. Читая несуществующую строку через fgets, я получаю "MMMMMMMMMMMMMxres 800", пытался сделать сравнение через stricmp (ибо другие способы мне неизвестны), но все равно проверка не проходила, и мой лаунчер считал что это и есть версия клиента. Пытался опять же найти информацию по этому поводу, и как-то не нашел. Затем я решил сделать отдельный файл, в котором это будет хранится, но и тут я прокололся...
Собственно вопросы: 1.Как правильно сравнивать 2 string именно на символы? 2.Как правильно проверять на отсутствие данных в строке файла? 3.Как правильно проверять на отсутствие файла? 4.Как правильно получать размер файла?
0
|
||||||
| 07.08.2011, 18:58 | |
|
Ответы с готовыми решениями:
25
Некоторые проблемы с монитором Утилита sfc не может исправить некоторые проблемы ASUS Zenbook UX32L появились некоторые проблемы |
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 07.08.2011, 20:16 | |
|
Это же С++, используй файловые потоки.
1. Вместо массивов символов используй std::string ( оператор == будет работать тогда) 2. Если ничего не считалось, то файл пуст 3. Если файл не открылся, то его нет (или использовать функции WinAPI) 4. Использовать функции WinAPI или переместить курсор в конец файла и запросить его положение (это если через потоки).
1
|
|
|
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
|
||||||||||||||||
| 07.08.2011, 23:22 [ТС] | ||||||||||||||||
![]() Хотя я из другого источника увидел пример, в котором было показано, что если файл не открылся, в переменную не чего не записывается, то есть она равна NULL. Пока не успел проверить.
![]() Собственно, если я решу проблему с этой функцией, возможно получится нормально перейти на string. Хотя интересно, можно ли конвертировать Char массив в string? Надо по искать, по пробывать. ![]() Спасибо за ответ. ![]() Добавлено через 46 минут По поводу FindFirstFile уже решил проблему. По идее теперь я могу сделать проверку на версию, но надеюсь мне помогут с остальным, ибо это тоже важно. ![]() Добавлено через 8 минут Хо-хо-хо, мне эта функция выдает один и тот же размер на 2 разных файла.
Это я где-то накосячил, или же тут ест что-то еще? Добавлено через 1 час 8 минут Нашел информацию, оказывается там все сложнее чем кажется...
Буду дальше думать...
0
|
||||||||||||||||
|
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
|
||||||
| 08.08.2011, 00:53 | ||||||
|
#include "windows.h"
0
|
||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|||
| 08.08.2011, 06:28 | |||
|
Через аргумент передаются верхние 32 бита размера файла, а младшие 32 бита через возвращаемое значение передаются. Т.е. размер файла - 64 битное число может быть.
0
|
|||
|
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
|
||||
| 08.08.2011, 11:28 [ТС] | ||||
1 - "client.exe" Error: The var of type "const char *" cannot be used to initialize an anty of type LPCWSTR. 2 - LPCWSTR("client.exe") об этом ты уже сказал. 3 - hf Переменная. ![]() Так что я пока все еще в растеряности.
0
|
||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|||||||
| 08.08.2011, 11:37 | |||||||
0
|
|||||||
|
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
|
||||||
| 08.08.2011, 11:46 [ТС] | ||||||
|
Вроде понял, сейчас проверим.
![]() Нашел вот такой пример TCHAR * cfname = TEXT("fmtest.txt"); на http://msdn.microsoft.com/en-u... S.85).aspx буду проверять. Добавлено через 6 минут
Аналогично и с вариантом из msdn.
0
|
||||||
|
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
|
||
| 08.08.2011, 11:55 [ТС] | ||
0
|
||
|
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
|
||||||
| 08.08.2011, 12:18 [ТС] | ||||||
|
Ну если ты этого хочешь, то вот:
Тут лаунчер, файл конфигураций и тот самый client.exe
0
|
||||||
|
|
|
| 08.08.2011, 13:15 | |
|
Только что заметил.. А почему у тебя второй параметр функции GetFileSizeEx равен нулю!? Нулю он не может быть равен.
Используй GetFileSize, в этой функции второй параметр нулю уже может быть равен, т.е. замени только имя функции. Добавлено через 26 минут Да и возвращает GetFileSizeEx BOOL а не DWORD ...
1
|
|
|
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
|
||||||
| 08.08.2011, 13:23 [ТС] | ||||||
|
Так и знал что в 4 часа ночи, есть хорошо пытатся искать решение подобной проблемы. Уже второй косяк на этой основе.
![]() Нус, все работает. Спасибо вам обоим за помощь. Добавлено через 4 минуты Хм... Просто поменял имя файла, дабы получить размер другого файла, и тут что-то касое... client.exe размер который показывает лаунчер: 382464, настоящий размер: 382464 vexed.exe размер который показывает лаунчер: 4294967295 настоящий размер: 485888
0
|
||||||
|
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
|
|
| 08.08.2011, 13:36 [ТС] | |
|
Стоп, но файл то не больше 4гб. На сколько я знаю, это нужно лишь в случае, если файл больше 4 гб.
0
|
|
|
|
||||||
| 08.08.2011, 13:52 | ||||||
|
Я тут решил проверить работоспособность функции с большим файлом... С GetFileSize возникли непонятные проблемы, зато GetFileSizeEx работает корректно, вот пример:
Стоп. Не совсем понял что у тебя там происходит. В общем попробуй последний пример.
0
|
||||||
|
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
|
|
| 08.08.2011, 14:26 [ТС] | |
|
Но так мой файл то и мегабайта не вешает. Собственно, этот вариант не может подходить.
0
|
|
|
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
|
||||||
| 08.08.2011, 15:45 [ТС] | ||||||
|
Нус написал я вот так:
0
|
||||||
| 08.08.2011, 15:45 | |
|
Помогаю со студенческими работами здесь
20
Проблемы при установке программ.Не устанавливаются некоторые прогаммы Домен или mdaemon? Проблемы с доставкой почты на некоторые адреса Жесткий диск после вирусов перестал видеть некоторые папки с файлами Проблемы с файлами *.swf Ошибка "Невозможно смантировать образ. Нет доступа к файлу" с mdf файлами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|