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

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

Войти
Регистрация
Восстановить пароль
 
Rianorix
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 7
#1

Ошибка при записи в файл через библиотеку io.h - C++

19.11.2014, 16:00. Просмотров 492. Ответов 2
Метки нет (Все метки)

Приветствую всех!
Пишу программу, в которой необходимо записывать информацию в файл. Для этого использовал функцию _write из библиотеки io.h. Работает она, вроде, нормально, но в случае, если нужно записать число из диапазона от 2560 до 2816, то функция начинает себя странно вести, а именно накидывает лишний байт. К примеру, записываю я тип int, и вместо 4 положенный байт она записывает 5, отчего получается совсем другое значение, а вся остальная последовательность байт смещается и происходит путаница при последующем считывании. Что с этой проблемой можно сделать?
Заранее спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 16:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при записи в файл через библиотеку io.h (C++):

Ошибка при записи в файл - C++
помогите, вылетает ошибка при записи в файл ф-я void add_in_file(int n) что не так? #include <iostream> #include <conio.h> ...

Ошибка при записи в файл - C++
Помогите добить задачку на С++. В общем прога работает правильно вот только когда идет запись в файл, то в файле находятса не данные...

Ошибка при записи данных в файл - C++
Для записи перменной типа string выделяю динамически массив из 64 элементов char,после записи данных освобождаю память,но почему-то при...

Ошибка при записи в бинарный файл - C++
Задание - записать в бинарный файл последовательность из N байт вида "00001111 11110000 00001111 ...". Почему-то 11110000 записывается...

Ошибка при записи или чтении в бинарный файл - C++
Есть такие вот типы данных: struct Nomer { int n, tsena1Deni; string klass; int kMest, kZaselenii; bool svoboden; Nomer...

Ошибка при записи в файл данных из обьекта класса - C++
#include <iostream> #include <conio.h> #include <fstream> using namespace std; class Vector { public: double x; ...

2
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
19.11.2014, 16:09 #2
Цитата Сообщение от Rianorix Посмотреть сообщение
Что с этой проблемой можно сделать?
для начала прислать исходный код. дальше о чем-то говорить будет проще и быстрее.
0
Rianorix
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 7
20.11.2014, 23:00  [ТС] #3
Цитата Сообщение от mss307 Посмотреть сообщение
для начала прислать исходный код. дальше о чем-то говорить будет проще и быстрее.
Вот программа, записывающая массив из десяти чисел:
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
#include <conio.h>
#include <sstream>
 
#include "Files.h"
 
//Фуннкция вывода
template <class T> void view(T v)
{
    cout << v << endl;
}
 
int main()
{
    int array[10] = {2, 4, 8, 16, 32, 2560, 64, 128, 256, 512};
    char *wrBuff = new char[sizeof(int) * 10];
    CFiles *file = new CFiles("number.dat");
    int bInx = 0;
 
    for(int i = 0; i < 10; i++)
    {
        memcpy(&wrBuff[bInx], &array[i], sizeof(int));
        bInx += sizeof(int);
    }
 
    if(file->OpenFile() == 0) file->CreatFile();
 
    file->reSizeFile(sizeof(int) * 10);
    file->LseekFile(0, SEEK_SET);
    file->WriteFile(wrBuff, sizeof(int) * 10);
 
    delete [] wrBuff;
    wrBuff = new char[sizeof(int) * 10];
 
    file->LseekFile(sizeof(int) * 6, SEEK_SET);
    file->ReadFile(wrBuff, sizeof(int) * 4);
 
    bInx = 0;
 
    for(int i = 0; i < 4; i++)
    {
        memcpy(&array[i], &wrBuff[bInx], sizeof(int));
        bInx += sizeof(int);
    }
 
    for(int i = 0; i < 4; i++)
        view(array[i]);
 
    file->CloseFile();
    delete file;
    delete [] wrBuff;
    
    _getch();
 
    return 0;
}
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "Files.h"
 
CFiles::CFiles(string fileName)
{
    this->fileName = fileName;
}
 
CFiles::~CFiles(void)
{
}
 
 
int CFiles::CreatFile()
{
    if(_access(fileName.c_str(), 0) == -1)
    {
        hFile = _creat(fileName.c_str(), S_IREAD | S_IWRITE);
 
        return 1;
    }
    else
        return 0;
}
 
int CFiles::OpenFile()
{
    if(_access(fileName.c_str(), 0) != -1)
    {
        hFile = _open(fileName.c_str(), O_RDWR);
        return 1;
    }
    else
        return 0;
}
 
void CFiles::CloseFile()
{
    _close(hFile);
}
 
int CFiles::ReadFile(char *cBuff, int buffLength)
{
    if(buffLength <= 0)
        return -1;
    
    int res = _read(hFile, &cBuff[0], buffLength);
 
    if(res == 0) return 0;
    if(res == 1) return -1;
 
    return res;
}
 
int CFiles::WriteFile(char *cBuff, unsigned long buffLength)
{
    if(buffLength == 0)
        return 0;
 
    int res = _write(hFile, cBuff, buffLength);
 
    if(res != buffLength)
        return -1;
 
    return 1;
}
 
int CFiles::reSizeFile(unsigned long newSize)
{
    return _chsize(hFile, newSize);
}
 
int CFiles::LseekFile(unsigned long offset, int оrigin)
{
    return _lseek(hFile, offset, оrigin);
}
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
#pragma once
 
#include <iostream>
 
#include <io.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <direct.h>
 
using namespace std;
 
class CFiles
{
public:
    CFiles(string);
    ~CFiles(void);
private:
    long hFile;
    string fileName;
public:
    int CreatFile();
    int OpenFile();
    void CloseFile();
    int ReadFile(char*, int);
    int WriteFile(char*, unsigned long);
    int reSizeFile(unsigned long);
    int LseekFile(unsigned long, int);
};
Полученный файл я открываю через программу WinHex. Вот скриншот:

Вложение 456596

Красным цветом подчёркнуто то, что получается при записи числа 2560.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2014, 23:00
Привет! Вот еще темы с ответами:

Ошибка при работе с библиотеку MySql - C++
Ошибка при когда не подключена библиотека: Picture1. А вот ошибка при подключенной библиотеки: Picture2. Хрен знает что уже делать....

Ошибка при попытке подключить внешнюю библиотеку - C++
Делал всё по инструкции, только пути другие. Пишет: Гуглёж не помог. Когда-то вроде с glut вылезла такая же проблема, но я не...

Ошибка записи в файл. :( - C++
Доброго времени суток дорогие форумчане. Решил написать программу которая считывает символы из одного файла (&quot;C:\\1.txt&quot;) в массив...

Баг при использовании класса string при записи в бинарный файл - C++
При записи в бинарный файл пользовательского класса, всё отлично отрабатывает, но, если в классе использовался класс string, то в конце...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru