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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Подскажите как переписать класс с использованием умных указателей, либо STL http://www.cyberforum.ru/cpp-beginners/thread1214196.html
К сожалению, знания об умных указателях и библиотеке STL прошли мимо меня... Сейчас пытаюсь восполнить этот пробел, но уже третий день не могу понять как этим пользоваться. Очень прошу помочь мне, показав, как описанный ниже класс перевести на умные указатели, или на векторы: class test { private: int Amount; int x;
C++ где ошибка в программе подскажите здравствуйте помогите плиз. каждую входящую "*" должно менять на "??"(считывается из файла)но выдает чепуху что в файле забито #include<iostream> #include<fstream> #include<string> int n,i; using namespace std; void main() {setlocale(0,""); ifstream in("D:\\1.txt"); if(!in){cout«"Ошибка!."«endl; system("pause");} http://www.cyberforum.ru/cpp-beginners/thread1214194.html
Упражнение на строки C++
Петя записался в кружок по программированию. На первом занятии Пете задали написать простую программу. Программа должна делать следующее: в заданной строке, которая состоит из прописных и строчных латинских букв, она: -удаляет все гласные буквы, -перед каждой согласной буквой ставит символ ".", -все прописные согласные буквы заменяет на строчные. Гласными буквами считаются буквы "A", "O",...
C++ Что лучше использовать для работы со строками класс wstring или wchar_t напрямую?
Всем привет! Мучает меня один вопрос: как грамотнее и безопаснее работать со строками: 1) Создавать экземпляр класса wstring и работать с ним. 2) Создавать строку при помощи wchar_t, затем использовать функции класса wstring для работы с ней.
C++ Как заменить символ "*" на "??" http://www.cyberforum.ru/cpp-beginners/thread1214156.html
доброго вечера. подскажите пожалуйста у меня по заданию идет заменить каждую встречающуюся * на ??(считываемую из файла). я понял как заменить * на ?, но как на ??. добавлю листинг который сделал.буду очень благодарен.#include<iostream> #include<fstream> using namespace std; void main() {setlocale(0,""); char name; cout<<"введите путь к файлу и нажмите ENTER"<<endl; cin.getline(name,80);...
C++ Определить, какие буквы слов совпадают чаще: первые, последние или средние (Pascal -> C++) Задача: Дан текст, состоящий из слов, разделенных пробелом. Определить, какие буквы совпадают чаще: первые, последние или средние. Текст программы: uses crt; procedure Byki(s : string); var first, last, mid : char; i, i_first, i_last, i_mid : byte; подробнее

Показать сообщение отдельно
gus21rus
0 / 0 / 0
Регистрация: 31.03.2013
Сообщений: 7
22.06.2014, 15:15     Работа с файлами, вставка в середину документа и навигация в нем с fseek
Товарищи, доброго вам дня. Столкнулся вот с такой проблемой. 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+"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru