Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
 Аватар для MadRabbit
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53

Некоторые проблемы с файлами

07.08.2011, 18:58. Показов 3200. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Категорически приветствую.
У меня возникла пара проблем с файлами. Я делаю лаунчер для одной программки (официальный лаунчер идет через браузер, что не есть хорошо для моего сервера) на консольке. Вроде все было нормально, до того как я решил сделать проверку на версию клиента.
В общем, сначала я хотел сделать при помощи сравнивания размеров файлов, но не где не смог найти внятной информации об этом.
Затем, я решил сделать инициализацию при помощи строки в файле конфигураций. Ну мол если она отсутствует, то спрашиваем у пользователя версию, ну а если есть уже эта строка, то уже читаем и сравниваем с актуальной версией. Тут я опять получил прокол. Читая несуществующую строку через fgets, я получаю "MMMMMMMMMMMMMxres 800", пытался сделать сравнение через stricmp (ибо другие способы мне неизвестны), но все равно проверка не проходила, и мой лаунчер считал что это и есть версия клиента. Пытался опять же найти информацию по этому поводу, и как-то не нашел.
Затем я решил сделать отдельный файл, в котором это будет хранится, но и тут я прокололся...
C++
1
2
3
4
5
6
7
8
9
10
file = fopen("тут как бы был путь к файлу","r");
if(file == 0) //Как я понял из найденой мною информации, fopen возврощает 0, если файла не существует.
{
cout << "тут собственно текст о просьбе указать версию";
cin >> input[0][0] //массив в котором хранятся и обрабатываются файлы клиента.
fclose(file); //на этом месте, в программе я получаю ошибку. Не совсем внятную. :)
file = fopen(file,"w"); 
fputs("0.54",file); //Для эксперемента удалял fclose, получал уже ошибку с этой функцией
fclose(file);
}
Собственно, тут я обессилил, и решил написать сюда.
Собственно вопросы:

1.Как правильно сравнивать 2 string именно на символы?
2.Как правильно проверять на отсутствие данных в строке файла?
3.Как правильно проверять на отсутствие файла?
4.Как правильно получать размер файла?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.08.2011, 18:58
Ответы с готовыми решениями:

Некоторые проблемы с монитором
Добрый вечер! Месяц назад купил монитор NEC MultiSync LCD 175M. Сразу скажу, что в работе, пока, нареканий особых нет. Но, беспокоят...

Утилита sfc не может исправить некоторые проблемы
Доброго времени суток, уважаемые форумчане. Сегодня установил &quot;народную&quot; версию gpedit.msc для Windows 7 x64 HomePremium (лицензия). К...

ASUS Zenbook UX32L появились некоторые проблемы
Здравствуйте! Ноутбук ASUS Zenbook UX32L Процессор - Intel Core Intel Core i5-4200U; Память - 8 Гб Видеокарта - Intel HD 4400;...

25
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
08.08.2011, 16:50
Студворк — интернет-сервис помощи студентам
А ты уверен что он у тебя вообще открывается?
Попробуй поставь проверку:
C
1
2
3
if ( cfile == INVALID_HANDLE_VALUE ) {
    printf( "error\n" );
}
У меня работает в разными размерами, и с маленькими (~ 250 байт), и со средними (~ 250 килобайт), ну с большими (~ 13 гигабайт) конечно же.
1
 Аватар для MadRabbit
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
08.08.2011, 17:25  [ТС]
Етить твоюж на лево! Я написал vexed.exe а не voxed.exe... Просто в голове все еще крутится, что у них рендеринг идет по принципу Vexel'ей, но движок называеться же у них Voxel.
Сейчас все работает. Спасибо брат.
Зато теперь я точно знаю, как работать в таком случае с файлами выше 4гб.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,877
09.08.2011, 01:03
нет конечно хорошо что вы разобрались
но разговор ушел на решение проблемы, а ошибки так и не исправились
Цитата Сообщение от MadRabbit Посмотреть сообщение
file = fopen("тут как бы был путь к файлу","r");
FILE *fopen(const char *fname, const char *mode);
Функиия fopenf() открывает файл, имя которого задается параметром fname, и возвращает указатель на поток, связанный с этим файлом. Типы операций, которые разрешено выполнять с файлом, определяются параметром mode. Возможные значения параметра mode. Строка символов, которая будет играть роль имени реального файла, должна определять его имя, допустимое в данной операционной системе. Эта строка может включать спецификацию пути, если среда поддерживает такую возможность.
то есть должно быть имя файла а не путь
Цитата Сообщение от MadRabbit Посмотреть сообщение
if(file == 0) //Как я понял из найденой мною информации, fopen возврощает 0, если файла не существует.
{
правильнее будет не открылся
Если функция fopen() успешно открыла заданный файл, она возвращает указатель FILE. Если файл открыть не удается, возвращается нулевой указатель.
не открытся он может и потому что открыт другим потоком, нет доступа .......
далее
Цитата Сообщение от MadRabbit Посмотреть сообщение
fclose(file); //на этом месте, в программе я получаю ошибку. Не совсем внятную.
по моему очень даже внятную
file = 0
тогда
fclose(file)=fclose(0)
тоесть ты закрываешь файл который даже не открыли

Цитата Сообщение от MadRabbit Посмотреть сообщение
file = fopen(file,"w");
что ты пытаешься сделать???
читай описание выше
Цитата Сообщение от MadRabbit Посмотреть сообщение
fputs("0.54",file); //Для эксперемента удалял fclose, получал уже ошибку с этой функцией
так же смотри выше
тебе надо было писать примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
file = fopen("file.txt","r");// открываем для чтения
if(file != 0) //файл открылся
{
fread(bufer, sizeof(bufer), 1, file);// что то прочитали в буфер
fclose(file);// закрыли файл
}
else //файл не открылся может его и нет
{
file = fopen("file.txt","w"); // открываем для записи
 if(file) // файл открылся
  {
   fputs("0.54",file); //что то пишем
    fclose(file);// закрыли файл
    }
  else
     printf("Error open file");//не смогли ни создать не прочитать файл
}
Добавлено через 17 минут
Цитата Сообщение от MadRabbit Посмотреть сообщение
HANDLE cfile = FindFirstFile("client.exe",&Data); Говорит что Char не есть хорошо для данной функции. Ищу ответ в поиске, но если кто-то поможет, тоже буду рад.
у тебя в настройках проекта стоит Юникоде (VS поумолчанию ставит) или убери использовать Юникоде
или что лучше привыкай описывать строки так _T("bla-bla")
_T макрос который решит в зависимости от настроек конвертить строку в Юникоде или нет
Цитата Сообщение от MadRabbit Посмотреть сообщение
Хотя интересно, можно ли конвертировать Char массив в string? Надо по искать, по пробывать.
если используешь MFC то есть хороший класс CString

Добавлено через 8 минут
Цитата Сообщение от MadRabbit Посмотреть сообщение
Хо-хо-хо, мне эта функция выдает один и тот же размер на 2 разных файла.
Цитата Сообщение от MadRabbit Посмотреть сообщение
HANDLE cfile = FindFirstFile(LPCWSTR("client.exe"),&Dat a);
функция возвращает не файл а хандлер для дальнейшего поиска
функцией FindNextFile а данные о файле лежат в структуре Data там и размер и время создания/изменения имного чего еще
так что
Цитата Сообщение от MadRabbit Посмотреть сообщение
DWORD Size=GetFileSizeEx(cfile,NULL);
лишнее
0
 Аватар для MadRabbit
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
09.08.2011, 13:51  [ТС]
Брат, ошибки то как раз исправились, по ходу решения проблемы.
Единственное, что я для себя увидел действительно ценное, это CString, по которому я сейчас и пойду гуглить.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,877
09.08.2011, 19:00
Посмотри для начала
http://msdn.microsoft.com/ru-r... 35631.aspx

Добавлено через 2 минуты
http://msdn.microsoft.com/ru-r... 74288.aspx
1
 Аватар для MadRabbit
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
09.08.2011, 19:00  [ТС]
Спасибо, по смотрю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.08.2011, 19:00

Проблемы при установке программ.Не устанавливаются некоторые прогаммы
Здравствуйте. У меня начались проблемы с установкой некоторых программ.Прилагаю скрины. ...

Домен или mdaemon? Проблемы с доставкой почты на некоторые адреса
Здравствуйте? уважаемые форумчане! Заранее извиняюсь. Возможно не втом разделе, но я пошел по следам тем о мдаемоне некоторое время...

Жесткий диск после вирусов перестал видеть некоторые папки с файлами
Всем доброго времени суток. Помогите пожалуйста!!! Жесткий диск после вирусов перестал видеть некоторые папки с файлами.Но,когда вставляю...

Проблемы с файлами *.swf
Всем привет! Вот сейчас захотел поиграть в одну игру в браузере, обычная swf, одиночнай, браузер(Опера 9,64) не захотел ее отображать -...

Ошибка "Невозможно смантировать образ. Нет доступа к файлу" с mdf файлами
Возможно пишу не туда заранее извиняюсь) но все таки: Иногда скачиваю образы MDF и практически всегда мне выдается ошибка с надписью:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Задача: Программно добавить префикс в нумерацию документов в самописной конфигурации на БСП (помощь начинающему коллеге). Решение: В модуле объекта документа размещен следующий код: Процедура. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru