Форум программистов, компьютерный форум, киберфорум
Наши страницы

Работа с файлами, вставка в середину документа и навигация в нем с fseek - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Подскажите как переписать класс с использованием умных указателей, либо STL http://www.cyberforum.ru/cpp-beginners/thread1214196.html
К сожалению, знания об умных указателях и библиотеке STL прошли мимо меня... Сейчас пытаюсь восполнить этот пробел, но уже третий день не могу понять как этим пользоваться. Очень прошу помочь мне,...
C++ где ошибка в программе подскажите здравствуйте помогите плиз. каждую входящую "*" должно менять на "??"(считывается из файла)но выдает чепуху что в файле забито #include<iostream> #include<fstream> #include<string> int n,i;... http://www.cyberforum.ru/cpp-beginners/thread1214194.html
Упражнение на строки C++
Петя записался в кружок по программированию. На первом занятии Пете задали написать простую программу. Программа должна делать следующее: в заданной строке, которая состоит из прописных и строчных...
C++ Что лучше использовать для работы со строками класс wstring или wchar_t напрямую?
Всем привет! Мучает меня один вопрос: как грамотнее и безопаснее работать со строками: 1) Создавать экземпляр класса wstring и работать с ним. 2) Создавать строку при помощи wchar_t, затем...
C++ Как заменить символ "*" на "??" http://www.cyberforum.ru/cpp-beginners/thread1214156.html
доброго вечера. подскажите пожалуйста у меня по заданию идет заменить каждую встречающуюся * на ??(считываемую из файла). я понял как заменить * на ?, но как на ??. добавлю листинг который...
C++ Определить, какие буквы слов совпадают чаще: первые, последние или средние (Pascal -> C++) Задача: Дан текст, состоящий из слов, разделенных пробелом. Определить, какие буквы совпадают чаще: первые, последние или средние. Текст программы: uses crt; procedure Byki(s : string); var... подробнее

Показать сообщение отдельно
gus21rus
0 / 0 / 0
Регистрация: 31.03.2013
Сообщений: 7

Работа с файлами, вставка в середину документа и навигация в нем с fseek - C++

22.06.2014, 15:15. Просмотров 223. Ответов 0
Метки (Все метки)

Товарищи, доброго вам дня. Столкнулся вот с такой проблемой. fseek не переносит указатель в нужную часть документа.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
int set_pos(struct DATABASE &db,int file,unsigned int pos)
{
int ERR=0;
switch(file)
  {
  case 0:
  ERR=fseek(db.index,pos,SEEK_SET);
  if(ERR<0) {return -1;} // Ошибка
  db.pos_index=pos;
  return db.pos_index;
  case 1:
  ERR=fseek(db.data,pos,SEEK_SET);
  if(ERR<0) {return -1;} // Ошибка
  db.pos_data=pos;
  }
return 0;
}
//*************************************************************************************************
int db_read(struct DATABASE &db,int file,str &read_buff,unsigned int pos,unsigned int len)
{
int ERR=0;
char *temp_buff=new char[len];
if(set_pos(db,file,pos)<0) {return -1;}
if(read_buff.free_size<len)
  { add_size(read_buff,len); }
ERR=fread(&temp_buff[0],1,len,(file==0) ? db.index : db.data);
if(ERR<0) {delete[] temp_buff; return -1;}
switch(file)
  {
  case 0:
  db.pos_index+=len;
  break;
  case 1:
  db.pos_data+=len;
  }
StrCpy(read_buff,&temp_buff[0],len);
delete[] temp_buff;
return ERR;
}
//-------------------------------------------------------------------------------------------------
int db_write(struct DATABASE &db,int file,str &write_buff,unsigned int pos)
{
int ERR=0;
if(set_pos(db,file,pos)<0) {return -1;}
ERR=fwrite(&write_buff.buff[0],1,write_buff.data_size,(file==0) ? db.index : db.data);
if(ERR<0) {return -1;}
switch(file)
  {
  case 0:
  db.pos_index+=write_buff.data_size;
  break;
  case 1:
  db.pos_data+=write_buff.data_size;
  }
return ERR;
}
Суть проблемы вот в чем. В тестовом варианте программы Я сначала пишу в файл определенную строку а потом стараюсь прочитать ее. Пишу я ее с нулевым смещением относительно начала файла (SEEK_SET).
Сам лисинг тестовой программы.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include "str.h"
#include "database.h"
using namespace std;
DATABASE db;
str buffer;
str out_buffer;
int main()
{
open_database(db);
init_str(buffer);
init_str(out_buffer);
cout<<"Current position of index="<<get_current_pos(db,0)<<". Current position of data="<<get_current_pos(db,1);
StrCpy(buffer," Yeah?");
set_end(buffer);
cout<<"Writing to bd="<< buffer.buff<<endl;
db_write(db,0,buffer,0);
db_read(db,0,out_buffer,0,10);
set_end(out_buffer);
cout<<"Out buffer= "<<out_buffer.buff<<endl;
}
StrCpy(buffer," Yeah?"); - Здесь я переодически меняю значение литерала, он пишет ее в конец, хотя по задумке должен в начало. А читает в out_buff верно с нулевой позиции. В чем может быть дело?

Добавлено через 3 часа 19 минут
Никто не может помочь?

Добавлено через 1 час 0 минут
Решил проблему заменой "ab+" на "rb+"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru