Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
#1

Не работает _fseeki64 - C++

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

Приветствую.
Не работает функция _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 ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2012, 21:16     Не работает _fseeki64
Посмотрите здесь:

C++ То работает, то не работает. Массив из случайных вещественных чисел
C++ Release не работает, Debug работает
Приложение работает в Win2K, не работает в Win2003 C++
C++ Функции fseek, _fseeki64
Работает в онлайн компиляторах, но не работает у меня C++
C++ Почему тип "bool" работает в файле с расширением .cpp и не работает в файле с расширением .c?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1898 / 1430 / 106
Регистрация: 29.05.2011
Сообщений: 2,986
16.06.2012, 21:55     Не работает _fseeki64 #2
Цитата Сообщение от Russian_Dragon Посмотреть сообщение
Кто знает в чем загвоздка?
В режиме открытия файла. Попробуй "w+b" или "r+b", в зависимости от того, надо ли перезаписать файл или просто обновить его.

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

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

А чем _fseeki64 от _fseeki64_nolock отличается? Что-то из msdn-а я не совсем понял в чем фокус.
grizlik78
Эксперт С++
1898 / 1430 / 106
Регистрация: 29.05.2011
Сообщений: 2,986
16.06.2012, 22:19     Не работает _fseeki64 #6
Хотя одна проблема всё-таки есть. Между операциями записи и чтения надо вставлять вызов одной из функций fflush, fseek, fsetpos, rewind (то есть, наверное, их 64-битные и "безопасные" аналоги).
Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
16.06.2012, 22:23  [ТС]     Не работает _fseeki64 #7
Цитата Сообщение от grizlik78 Посмотреть сообщение
Хотя одна проблема всё-таки есть. Между операциями записи и чтения надо вставлять вызов одной из функций fflush, fseek, fsetpos, rewind (то есть, наверное, их 64-битные и "безопасные" аналоги).
Хорошо, потестим. Спасибо за предупреждение.
grizlik78
Эксперт С++
1898 / 1430 / 106
Регистрация: 29.05.2011
Сообщений: 2,986
16.06.2012, 22:26     Не работает _fseeki64 #8
nolock-версия должна быть несколько быстрее, поскольку не использует блокировки для обеспечения нормальной работы в многопоточном приложении. Если потоки не используются, то можно пользовать nolock
Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
16.06.2012, 22:30  [ТС]     Не работает _fseeki64 #9
Цитата Сообщение от grizlik78 Посмотреть сообщение
nolock-версия должна быть несколько быстрее, поскольку не использует блокировки для обеспечения нормальной работы в многопоточном приложении. Если потоки не используются, то можно пользовать nolock
А, не, тогда надо блокировать обязательно. Еще раз спасибо.
Yandex
Объявления
16.06.2012, 22:30     Не работает _fseeki64
Ответ Создать тему
Опции темы

Текущее время: 05:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru