1 / 2 / 0
Регистрация: 20.01.2017
Сообщений: 52
1

Переделать работу с файлом на уровне ОС на уровень потока

30.06.2017, 15:40. Показов 901. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Переделайте пожалуйста 2 метода,которые работают с файлом с уровня операционной системы на уровень работы с потоками
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
    Data* Load(char* fileName, int* size)
    {
        Data* Data_LOAD;
        FILE* file = fopen(fileName, "r+b");
        if (!file)
        {
            cout << "ОШИБКА! Файл с именем " << fileName << " не существует." << endl;
            return NULL;
        }
        int size_load;
        size_t size_dannye;
        fseek(file, 0, SEEK_SET);
        fread(&size_load, sizeof(int), 1, file);
        Data_LOAD = new Data[size_load];
        for (int i = 0; i<size_load; i++)
        {
            fread(&size_dannye, sizeof(int), 1, file);
            fread((Data_LOAD + i)->directory.name_firma, sizeof(char), size_dannye, file);
            fread(&size_dannye, sizeof(int), 1, file);
            fread((Data_LOAD + i)->directory.owner, sizeof(char), size_dannye, file);
            fread(&size_dannye, sizeof(int), 1, file);
            fread((Data_LOAD + i)->directory.mobil, sizeof(char), size_dannye, file);
            fread(&size_dannye, sizeof(int), 1, file);
            fread((Data_LOAD + i)->directory.adress, sizeof(char), size_dannye, file);
            fread(&size_dannye, sizeof(int), 1, file);
            fread((Data_LOAD + i)->directory.occupation, sizeof(char), size_dannye, file);
        }
        fclose(file);
        *size = size_load;
        return Data_LOAD;
    }
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
Data* Remove(Data* Data_DELETE, int index, int* size_)
    {
        int size_delete;
        size_delete = *size_;
        if (index<0 || index>size_delete - 1)
        {
            cout << "Индекс за границами массива." << endl;
            return NULL;
        }
        Data* tmp;
        tmp = new Data[size_delete];
        for (int i = 0; i<size_delete; i++)
        {
            strcpy(tmp[i].directory.name_firma, Data_DELETE[i].directory.name_firma);
            strcpy(tmp[i].directory.owner, Data_DELETE[i].directory.owner);
            strcpy(tmp[i].directory.mobil, Data_DELETE[i].directory.mobil);
            strcpy(tmp[i].directory.adress, Data_DELETE[i].directory.adress);
            strcpy(tmp[i].directory.occupation, Data_DELETE[i].directory.occupation);
        }
 
        Data_DELETE = new Data[size_delete - 1];
 
        for (int i = 0, j = 0; i<size_delete; i++, j++)
        {
            if (i == index)
                i++;
            strcpy(Data_DELETE[j].directory.name_firma, tmp[i].directory.name_firma);
            strcpy(Data_DELETE[j].directory.owner, tmp[i].directory.owner);
            strcpy(Data_DELETE[j].directory.mobil, tmp[i].directory.mobil);
            strcpy(Data_DELETE[j].directory.adress, tmp[i].directory.adress);
            strcpy(Data_DELETE[j].directory.occupation, tmp[i].directory.occupation);
        }
        (*size_)--;
        size_delete = *size_;
        delete[] tmp;
        return Data_DELETE;
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2017, 15:40
Ответы с готовыми решениями:

Конвертация потока c файлом XLS в поток c файлом XLSX
На сервер приходит поток Stream в котором содержится XLS файл. Для работы с Excel используется...

Работа с Excel файлом на easy уровне
Драсти.... Всё уже перелопатил. Часа 2 ковыряюсь но не могу найти способа как прочесть и записать в...

Сохранение файла на уровне потока
Как из этой функции сохранения файла на уровне операционки сделать функцию сохранения файла на...

Нужно добавить 2 строки в файлы, которые находятся на одном уровне с bat файлом
Доброго времени ! Как добавить 2 строки в конец файлов c расширением tab, которые находятся на...

3
7525 / 6391 / 2913
Регистрация: 14.04.2014
Сообщений: 27,845
30.06.2017, 16:32 2
Лучший ответ Сообщение было отмечено XoPToN как решение

Решение

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
    Data* Load(char* fileName, int* size)
    {
        Data* Data_LOAD;
        std::ifstream file(fileName, ios_base::binary);
        if (!file)
        {
            cout << "ОШИБКА! Файл с именем " << fileName << " не существует." << endl;
            return NULL;
        }
        int size_load;
        size_t size_dannye;
        file.read(reinterpret_cast<char *>(&size_load), sizeof(int));
        Data_LOAD = new Data[size_load];
        for (int i = 0; i<size_load; i++)
        {
            file.read(reinterpret_cast<char *>(&size_dannye), sizeof(int));
            file.read(reinterpret_cast<char *>(Data_LOAD[i]->directory.name_firma), size_dannye);
 
            //...
 
        }
        *size = size_load;
        return Data_LOAD;
    }
1
1 / 2 / 0
Регистрация: 20.01.2017
Сообщений: 52
01.07.2017, 12:00  [ТС] 3
может вы мне уделите еще минутку и переделаете функцию сохранения?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int Save(char* fileName, Data* Data_SAVE, int size_)
{
    size_t size_dannye;
    FILE* file = fopen(fileName, "w+b");
    fseek(file, 0, SEEK_SET);
    fwrite(&size_, sizeof(int), 1, file);
    for (int i = 0; i < size_; i++)
    {
        size_dannye = strlen((Data_SAVE + i)->fio.fam) + 1;
        fwrite(&size_dannye, sizeof(int), 1, file);
        fwrite((Data_SAVE + i)->fio.fam, sizeof(char), size_dannye, file);
    }
    fclose(file);
    return 1;
}
0
7525 / 6391 / 2913
Регистрация: 14.04.2014
Сообщений: 27,845
01.07.2017, 16:06 4
Сам, что ли, не можешь заменить по аналогии?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int Save(char* fileName, Data* Data_SAVE, int size_)
{
    size_t size_dannye;
    std::ofstream file(fileName, ios_base::binary);
    file.write(reinterpret_cast<char *>(&size_), sizeof(int));
    for (int i = 0; i < size_; i++)
    {
        size_dannye = strlen((Data_SAVE + i)->fio.fam) + 1;
        file.write(reinterpret_cast<char *>(&size_dannye), sizeof(int));
        file.write(reinterpret_cast<char *>(Data_SAVE[i]->fio.fam), size_dannye);
    }
    return 1;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2017, 16:06
Помогаю со студенческими работами здесь

Устроился на работу. Оцените уровень.
Устроился на работу программистом. Обязанности: - администрировать сайт организации (добавлять...

Какому программисту на начальном уровне легче найти работу?
Привет! Сейчас я только учусь программированию изучая Python и я начал задумываться, в какую...

Определить уровень Ферми и работу выхода электрона в металле
привет всем! подскажите пожалуйста с задачей: Глубина потенциальной ямы V металла составляет 12.5...

Переделать программу (работа с файлом)
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt;...

Организовать работу с файлом
Добрый день, недавно начал изучать Phyton и наткнулся на такую задачу, которая мне не по силам....

задача на работу с файлом
Имеется предложение. Найти позицию первого вхождения заданного символа. Предусмотреть ввод искомого...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru