Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
1

Не работает _fseeki64

16.06.2012, 21:16. Показов 832. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую.
Не работает функция _fseeki64, сдвиг указателя не производится, либо я не так понимаю действия этой функции.
В урезанном виде код выглядит так:
C++
1
2
3
4
5
6
7
8
char str1[] = {'a', 'b', 'c'};
char str2[] = {'1', '2', '3'};
FILE* file;
_wfopen_s(&this->file, address.c_str(), L"ab");
_fseeki64(this->file, 0L, SEEK_SET);
fwrite(&str1, sizeof(char), sizeof(str1), file);
_fseeki64(this->file, 0L, SEEK_SET);
fwrite(&str2, sizeof(char), sizeof(str2), file);
По идее в файле должно быть
123abc
а в реальности он выглядит так
abc123

Поиск в инете не дал окончательного ответа.
Кто знает в чем загвоздка?

П.с.
Чем отличаются функции _fseeki64 и _fseeki64_nolock ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2012, 21:16
Ответы с готовыми решениями:

Приложение работает в Debug, странно работает в Release и не работает при билде
Действия выполняются на эмуляторе Pixel 2. Android 9.0. Если я запускаю приложение с конфигурацией...

Мышь работает через раз, то есть запустил ОС - мышь не работает, перезагрузил - мышь работает
Установлена Windows 7 со всеми последними обновлениями. Все всегда замечательно работало. Но с...

Решил портировать игру на андроид но управление не работает. Прыжок и стрельба работает
Решил портировать игру на андроид но управление не работает. Прыжок и стрельба работает. Очень...

Не работает php на wps-е. Гланвая страница работает все остальное нет
На локальном дэнвере все отлично работает. Но при копировании на впс и сдоступом через сеть...

8
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
16.06.2012, 21:55 2
Цитата Сообщение от Russian_Dragon Посмотреть сообщение
Кто знает в чем загвоздка?
В режиме открытия файла. Попробуй "w+b" или "r+b", в зависимости от того, надо ли перезаписать файл или просто обновить его.

Цитата Сообщение от Russian_Dragon Посмотреть сообщение
По идее в файле должно быть
123abc
Нет, там будет только 123, так как символы abc перезапишутся, а не сдвинутся. Вставки внутри файла не бывает. Только перезапись.
1
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
16.06.2012, 22:05  [ТС] 3
Цитата Сообщение от grizlik78 Посмотреть сообщение
Нет, там будет только 123, так как символы abc перезапишутся, а не сдвинутся. Вставки внутри файла не бывает. Только перезапись.
Да, точно, именно это я и хотел получить. Просто переклиняло.

Цитата Сообщение от grizlik78 Посмотреть сообщение
В режиме открытия файла. Попробуй "w+b" или "r+b", в зависимости от того, надо ли перезаписать файл или просто обновить его.
О, спасибо, заработало.
Но теперь проблема с нормальным использованием. Мне в файл нужно не только записать, но и читать из него данные. Есть способ использовать только один указатель на файл?
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
16.06.2012, 22:09 4
Цитата Сообщение от Russian_Dragon Посмотреть сообщение
Но теперь проблема с нормальным использованием. Мне в файл нужно не только записать, но и читать из него данные. Есть способ использовать только один указатель на файл?
А что за проблема? Вроде оба режима позволяют и чтение и запись.
1
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
16.06.2012, 22:17  [ТС] 5
Цитата Сообщение от grizlik78 Посмотреть сообщение
А что за проблема? Вроде оба режима позволяют и чтение и запись.
Я просто про флаги немного невнимательно прочитал. Спасибо, за подсказку, я нашел нужный режим работы "w+b".

А чем _fseeki64 от _fseeki64_nolock отличается? Что-то из msdn-а я не совсем понял в чем фокус.
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
16.06.2012, 22:19 6
Хотя одна проблема всё-таки есть. Между операциями записи и чтения надо вставлять вызов одной из функций fflush, fseek, fsetpos, rewind (то есть, наверное, их 64-битные и "безопасные" аналоги).
0
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
16.06.2012, 22:23  [ТС] 7
Цитата Сообщение от grizlik78 Посмотреть сообщение
Хотя одна проблема всё-таки есть. Между операциями записи и чтения надо вставлять вызов одной из функций fflush, fseek, fsetpos, rewind (то есть, наверное, их 64-битные и "безопасные" аналоги).
Хорошо, потестим. Спасибо за предупреждение.
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
16.06.2012, 22:26 8
nolock-версия должна быть несколько быстрее, поскольку не использует блокировки для обеспечения нормальной работы в многопоточном приложении. Если потоки не используются, то можно пользовать nolock
1
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
16.06.2012, 22:30  [ТС] 9
Цитата Сообщение от grizlik78 Посмотреть сообщение
nolock-версия должна быть несколько быстрее, поскольку не использует блокировки для обеспечения нормальной работы в многопоточном приложении. Если потоки не используются, то можно пользовать nolock
А, не, тогда надо блокировать обязательно. Еще раз спасибо.
0
16.06.2012, 22:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2012, 22:30
Помогаю со студенческими работами здесь

IE опять все портит, в 9 версии работает, а в остальных нет. не работает float
сайт http://gkantecreo.ru/ вверху в шапке слайдер в блоке div с css {float: left; padding-left:...

В Windows Forms некоректно работает метод, хотя в консоли работает правильно
//Данный метод должен заменять все элементы в массиве на 1, после найменьшего. public string...

Windows 7, не работает часть служб, не работает сеть, восстановление системы не помогает
Приветствую коллеги! Сам админю уже лет 10, не случалось ситуации еще что гугл не помогал, но вот...

Надо понять правильно работает код или нет. И работает ли он вообще
Он должен вычислить сумму с точностью эпсилон #include <iostream> using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru