С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для XoPToN
1 / 2 / 0
Регистрация: 20.01.2017
Сообщений: 52

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

30.06.2017, 15:40. Показов 1060. Ответов 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.06.2017, 15:40
Ответы с готовыми решениями:

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

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

Сохранение файла на уровне потока
Как из этой функции сохранения файла на уровне операционки сделать функцию сохранения файла на уровне потока? int Save(char* fileName,...

3
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
30.06.2017, 16:32
Лучший ответ Сообщение было отмечено 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
 Аватар для XoPToN
1 / 2 / 0
Регистрация: 20.01.2017
Сообщений: 52
01.07.2017, 12:00  [ТС]
может вы мне уделите еще минутку и переделаете функцию сохранения?

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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.07.2017, 16:06
Сам, что ли, не можешь заменить по аналогии?
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.07.2017, 16:06
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru