Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 25.11.2013
Сообщений: 74

Теория о файлах и файловой системе

14.05.2015, 22:16. Показов 2623. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста сайт или книгу где можно взять хорошую теория о файлах и файловой системе в языке C++?

Не по теме:

Прошу не отвечать типа гугл в помощь и т.д. Искал

0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.05.2015, 22:16
Ответы с готовыми решениями:

Управление каталогом в файловой системе
Собственно есть задание, написать модель файловой системы ну и совершать с ней там всякие штуковины. вопрос вот в чем у меня есть...

Как получить размер блока в файловой системе
Си+ linux. Пытаюсь вывести размер блока файловой системы struct stat buf; i = stat("имя файла", &buf); ...

Восстановление удалённых данных в файловой системе FAT и FAT32
Прошу помощи! Дословно задача стоит такая: написать программу, выполняющую восстановление удалённых файлов для форматов FAT и FAT32....

8
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
14.05.2015, 22:25
http://en.cppreference.com/w/cpp/io
http://www.boost.org/doc/libs/... /index.htm
1
 Аватар для jonson
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
14.05.2015, 22:27
Цитата Сообщение от Shults_13 Посмотреть сообщение
файловой системе в языке C++
файловая система - определяет способ организации, хранения и именования данных. С++ язык программирования.
Причем одно к другому?
0
 Аватар для Mamoruhiko
45 / 42 / 48
Регистрация: 13.05.2015
Сообщений: 222
14.05.2015, 22:34
Лучший ответ Сообщение было отмечено Shults_13 как решение

Решение

Вообще, могу посоветовать почитать труд Брайана Кернигана "Язык программирования Си".
Немного теории
Работа с файлами в C++

Для работы с файлами используются специальные типы данных, называемые потоками.
Поток ifstream служит для работы с файлами в режиме чтения.
Поток ofstream служит для работы с файлами в режиме записи.
Поток fstream служит для работы с файлами в режиме как чтения, так и
записи.

В программах на C++ при работе с текстовыми файлами в потоковом режиме необходимо подключать библиотеки iostream и fstream.

Функция открытия файла.
Для того чтобы начать работать с текстовым файлом, необходимо описать переменную типа ofstream. Например, с помощью оператора ofstream F; будет создана переменная F для записи информации в файл. На следующем этапе файл необходимо открыть для записи. В общем случае оператор открытия файла будет иметь вид:
C++
1
F.open("file", mode);
где F – переменная, описанная как ofstream;
file – полное имя файла на диске;

mode – режим работы с открываемым файлом.
Существуют следующие режимы для открытия файла.
Режимы работы с файлом при открытии
Режим Описание
ios::in - открыть файл в режиме чтения данных, этот режим является режимом по умолчанию для потоков ifstream
ios::out - открыть файл в режиме записи данных, этот режим является режимом по умолчанию для потоков ofstream
ios::app - открыть файл в режиме записи данных в конец файла
ios::ate - передвинуться в конец уже открытого файла
ios::trunc - очистить файл, это же происходит в режиме ios::out
ios::nocreate - не выполнять операцию открытия файла, если он не существует
ios::noreplace - не открывать существующий файл
ios::binary - открыть двоичный файл
Параметр mode может отсутствовать, в этом случае файл открывается в режиме по умолчанию для данного потока:
ios::in – для потоков ifstream,
ios::out – для потоков ofstream.

После удачного открытия файла (в любом режиме) в переменной F будет храниться 1 (true), в противном случае 0 (false). Это позволит проверять корректность операции открытия файла. Если открытие файла завершилось неудачей, объект, соответствующий потоку, будет возвращать значение 0:
C++
1
2
3
if (!ofs){
cout << "Файл не открыт\n";
}
Проверить успешность открытия файла можно также с помощью функции is_open(), имеющей следующий прототип:
Функция возвращает 1, если поток удалось связать с открытым файлом.
Например,
C++
1
2
if (!ofs.is_open())
cout << "Файл не открыт\n";
Открыть файл в режиме записи можно одним из следующих способов:
Первый способ
C++
1
2
ofstream F;
F.open("abc.txt", ios::out);
Второй способ, режим ios::out является режимом по умолчанию для потока ofstream
C++
1
2
ofstream F;
F.open("abc.txt");
Третий способ объединяет описание переменной типа поток и открытие файла в одном операторе.
C++
1
ofstream F("abc.txt", ios::out);
После открытия файла в режиме записи, будет создан пустой файл, в который можно будет записывать информацию. Если необходимо открыть существующий файл (при этом сохранить его содержимое), то в качестве режима следует использовать значение ios::app. После открытия файла в режиме записи, в него можно писать точно так же, как и на экран, только вместо стандартного устройства вывода cout необходимо указать имя открытого для записи файла. Например, для записи в поток F переменной a, оператор вывода будет иметь вид:
C++
1
F << a;
Для последовательного вывода в поток G переменных b, c и d оператор вывода станет таким:
C++
1
G << b << c << d;
Чтение из файла выполняется корректно до достижения конца файла. Для проверки, достигнут ли конец файла, можно использовать функцию ios::eof(), которая имеет прототип int eof();. Данная функция возвращает 0, если конец файла не достигнут, и значение 1 при достижении конца файла.

Функция закрытия файла.
Открытые на диске файлы после окончания работы с ними рекомендуется закрыть. Оператор закрытия файла будет иметь вид:
C++
1
F.close;
где F – переменная для записи информации в файл.

Основные алгоритмы работы с файлами.
Для записи данных в файл нужно выполнить:
1. Описать переменную типа ofstream.
2. Открыть файл для записи с помощью функции open.
3. Вывести информацию в файл с помощью cout.
4. Обязательно закрыть файл.
Для чтения данных из текстового файла нужно выполнить:
1. Описать переменную типа ifstream.
2. Открыть файл для чтения с помощью функции open.
3. Считать информацию из файла с помощью cin при считывании
каждой порции данных необходимо проверять, что чтение возможно.
4. Закрыть файл.

Пример. Работа с файлом в потоковом режиме.
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
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <fstream>
int _tmain(int argc, _TCHAR* argv[]){
int n = 50;
char str[20];
// Открываем файл для вывода
ofstream ofs("Test.txt");
// Проверка корректности открытия файла
if (!ofs) cout << "Файл не открыт.\n";
else {
ofs << "Hello!\n" << n;
// Закрываем файл
ofs.close();
}
// Открываем тот же файл для ввода
ifstream file("Test.txt");
// Проверка корректности открытия файла
if (!file) cout << "Файл не открыт.\n";
else {
file >> str >> n;
cout << str << "\n" << n;
// Закрываем файл
file.close();
}
system("pause");
return 0;
}
0
1 / 1 / 0
Регистрация: 25.11.2013
Сообщений: 74
14.05.2015, 22:46  [ТС]
Nosey, , Спасибо. Но есть что-то на русском. В английском не очень силён...

jonson, У меня теоретическое задание для контрольной... если есть что либо по файлам я буду не против...

Добавлено через 18 секунд
Mamoruhiko, Спасибо Большое!!
0
 Аватар для Mamoruhiko
45 / 42 / 48
Регистрация: 13.05.2015
Сообщений: 222
14.05.2015, 22:53
Shults_13, не за что, рад помочь.
Я на днях лабу писал по этой теме, можете наглядно посмотреть реализацию этих функций:
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
76
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <fstream>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define MAXLEN 5000
 
int main()
{
    setlocale(0,"rus");
    //создание последовательности целых чисел, вводимых с клавиатуры (признак конца ввода 999)//
    int Array[MAXLEN], i=0, j=0;
    cout << "Введите последовательность чисел; конец ввода - ввод числа 999:\n";
    while (Array[i-1]!=999){cin >> Array[i]; i++;}
    
    //запись введенной последовательности чисел в тестовый файл//
    ofstream TextFile("Test.txt");
    if (!TextFile) cout << "Файл не открыт.\n";
    else {while (j!=i){TextFile << Array[j] << " "; j++;}TextFile.close();}
 
    //генерация n случайных чисел//
    cout << "Введите число n: "; int n; do{cin >> n;}while(n<=0);
    int *RandomArray = new int[n]; i=0, j=0; 
    time_t t; srand((unsigned) time(&t)); while (i<n){RandomArray[i]=rand()%1000-0; i++;}
 
    //запись сгенерированных чисел в бинарный файл//
    ofstream BinFile("TestBin.bin");
    if (!BinFile) cout << "Файл не открыт.\n";
    else {while (j!=i){BinFile << RandomArray[j] << " "; j++;}
    BinFile.close();}
 
    //clean//
    delete []RandomArray;
 
    //определение длины и чтение бинарного файла//
    int count=0, BufArray[MAXLEN]; i=0;
    ifstream BinFileCount("TestBin.bin");
    if (!BinFileCount) cout << "Файл не открыт.\n";
    else {while (!BinFileCount.eof()){BinFileCount >> BufArray[count];count++;}
    cout << "Содержимое бинарного файла: "; for (int i=0; i<count-1; i++){cout << BufArray[i] << " ";} cout << "\n"; 
    BinFileCount.close();}
 
    //дозапись в текстовый файл содержимого бинарного файла//
    j=0;
    ofstream TextFileApp("Test.txt", ios::app);
    if (!TextFileApp) cout << "Файл не открыт.\n";
    else {while (j!=count-1){TextFileApp << BufArray[j] << " "; j++;}
    TextFileApp.close();}cout << "Данные из бинарного файла дописаны в текстовый.\n";
    
    //открытие дозаписанного текстового файла//
    count=0; i=0;
    ifstream TextFileCount("Test.txt");
    if (!TextFileCount) cout << "Файл не открыт.\n";
    else {while (!TextFileCount.eof()){TextFileCount >> BufArray[count];count++;}
    cout << "Содержимое текстового файла: "; for (int i=0; i<count-1; i++){cout << BufArray[i] << " ";} cout << "\n";
    TextFileCount.close();}
 
    //поиск наибольшего значения среди чисел файла//
    int MAX=0, MIN=0;
    for (int i=0; i<count-1; i++)
    {if (BufArray[i]>MAX) MAX=BufArray[i];}
    cout << "Наибольшее значение среди чисел текстового файла: " << MAX << "\n";
 
    //поиск наименьшего значения среди чисел файла//
    MIN=MAX;
    for (int i=0; i<count-1; i++){if (BufArray[i]<MIN) MIN=BufArray[i];}
    cout << "Наименьшее значение среди чисел текстового файла: " << MIN << "\n";
 
    //поиск среднего арифметического значение чисел файла//
    float SUMM=0.0;
    for (int i=0; i<count-1; i++){SUMM +=BufArray[i];}
    cout << "Среднее арифметическое значение чисел текстового файла: " << SUMM/(count-1)<<"\n";
    return 0;
}
0
1 / 1 / 0
Регистрация: 25.11.2013
Сообщений: 74
14.05.2015, 23:02  [ТС]
Mamoruhiko, Спасибо. У меня так получилось, что программу (практическое задание) я сделал. Но когда возникали вопросы или сложности, то просто лазил по форуму смотрел примеры и т.д. А когда дело дошло что в контрольную нужно вставить теорию то оказалось сложностью найти её, а не пример выполнения задачи или отдельной части...
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
14.05.2015, 23:05
Цитата Сообщение от Shults_13 Посмотреть сообщение
Nosey, , Спасибо. Но есть что-то на русском. В английском не очень силён...
http://ru.cppreference.com/w/cpp/io Что-то переведено нормально,что-то гуглтранслейт
1
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
15.05.2015, 02:02
...
http://cppstudio.com/post/446/
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2015, 02:02
Помогаю со студенческими работами здесь

В файловой системе каталог файлов организовать как линейный список
Вот такое задание : в файловой системе каталог файлов организован как линейный список.Для каждого файла в каталоге содержатся следующие...

Есть 2 файла. В файлах числа, найти самое большое число в обоих файлах
С++ Есть два файла В обоих файлах записаны слова Найти самое большое число в обоих файлах

Поиск в файловой системе
Внешняя обработка сканирует папки и выбирает, чтобы записать нужные файлы, но может записывать файлы множество раз. Подумала проверку...

Доступ к файловой системе
Доброго времени суток. Существует следующая ситуация. Есть ПК под управлением Windows (7, 8.1). Есть устройство, с WindowsCE 5 на борту....

Скрипт по файловой системе
Люди может кто знает как реализовать скрипт. Необходимо что бы мне выводило путь к файлу/имя файла/размер файла и что бы всё был...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru