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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Как экранировать слеш для char? http://www.cyberforum.ru/cpp-beginners/thread1305067.html
Привет всем.. Подскажите как сравнить значение char со слешем? Вот так не работает( char *buf = new char ; if (buf == '\') i++; else k++; и так char *buf = new char ;
C++ Преобразовать число в текст на русском языке (С# -> С++) Смысл задачи нужно преобразовать число в текст на русском языке (пример: "7524" -> "семь тысяч пятьсот двадцать четыре") int number = int.Parse(Console.ReadLine()); int array_int = new int; string array_string = new string {{" миллиард", " миллиарда", " миллиардов"}, {" миллион", " миллиона", " миллионов"}, {" тысяча", " тысячи", "... http://www.cyberforum.ru/cpp-beginners/thread1305065.html
Создать иерархию типов, описывающую операционную систему и прикладное программное обеспечение C++
Создать иерархию типов, описывающая операционную систему и прикладное программное обеспечение, и Windows NT как операционную систему и прикладное программное обеспечение. Классы должны иметь конструкторы, включая конструктор копирования, виртуальные деструкторы, перегруженные функции Вывод в поток и ввод из потока.
C++ Создайте класс точка, имеющая координаты. Класс эллипсов, и класс кругов. Определить иерархию типов
Создайте класс точка, имеющая координаты. Класс эллипсов, и класс кругов. Определить иерархию типов. определить функции печати, конструкторы, деструкторы, вычисления площади.
C++ Комплексное число http://www.cyberforum.ru/cpp-beginners/thread1305035.html
Комплексное число задается своим модулем и углом (например, число 10 * (Cos (π / 6) + Sin (π / 6)) задается парой (10 π / 6). реализовать: ⎯ Добавление (вычитание) чисел ⎯ Произведение двух чисел деление чисел ⎯ Возведение в степень (^) ⎯ Добыча квадратного корня (sgrt ())
C++ Написать перегруженную функцию Используя перегрузки, написать функцию для выполнения действий, для следующих типов данных float, int, double, long: приведение типов. подробнее

Показать сообщение отдельно
Rianorix
 Аватар для Rianorix
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 7
20.11.2014, 23:00  [ТС]     Ошибка при записи в файл через библиотеку io.h
Цитата Сообщение от 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.
 
Текущее время: 18:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru