Similar presentations:
Файлы в С/ С++
1.
2.
ФАЙЛФайл (англ. file) – именованная область данных на носителе информации,
используемая как базовый объект взаимодействия с данными
в операционных системах.
Файл – это упорядоченная совокупность данных, хранимая на диске и
занимающая именованную область внешней памяти. Величина файла
характеризуется объемом содержащимся в нем информации.
3.
Файл (англ. file - папка, скоросшиватель) сущность, позволяющая получить доступ ккакому-либо ресурсу вычислительной системы
и обладающая рядом признаков:
• фиксированное имя (последовательность
символов, число или что-то иное,
однозначно характеризующее файл);
• определённое логическое представление
(формат).
4.
Файлы в С++5.
СВОЙСТВА ФАЙЛА• Имя файла
• Расширение имени файла
• Время
• Владелец, группа и права доступа к файлу
6.
УКАЗАТЕЛЬ ФАЙЛАДоступ к компонентам файла осуществляется через указатель файла.
7.
ОПЕРАЦИИ С ФАЙЛОМ:ДОПОЛНИТЕЛЬНЫЕ СУЩНОСТИ
• файловый указатель
• файловый буфер
• режим доступа
•…
8.
ОПЕРАЦИИ, СВЯЗАННЫЕ С ОТКРЫТИЕМ ФАЙЛА• открытие файла (параметры: имя файла, режим доступа, …
значение: файловый хэндлер).
Хэндлер файла (или дескриптор, описатель) - это число или указатель
на структуру, который ОС возвращает при открытии файла
• закрытие файла (параметры: файловый указатель)
при закрытии все файловые буферы сбрасываются.
9.
ОПЕРАЦИИ, СВЯЗАННЫЕ С ОТКРЫТИЕМ ФАЙЛА• запись
• чтение
в файл помещаются данные.
данные из файла помещаются в область памяти.
• перемещение указателя
указатель перемещается на указанное число байт вперёд/назад или
перемещается по указанному смещению относительно начала/конца.
• сброс буферов
• получение текущего значения файлового указателя.
10.
ОПЕРАЦИИ, НЕ СВЯЗАННЫЕС ОТКРЫТИЕМ ФАЙЛА
• удаление файла
• переименование файла
• копирование файла
• перенос файла на другую файловую систему/носитель информации
• получение или изменение атрибутов файла
11.
ФАЙЛЫ В С/С++• все файлы рассматриваются как неструктурированные последовательности
байтов, что распространяет понятие файла и на различные устройства.
• открытый файл представляется как последовательность считываемых или
записываемых данных и с ним связывается поток ввода-вывода
• поток определяется как последовательность байтов и не зависит от
конкретного устройства, с которым производится обмен (оперативная
память, файл на диске, клавиатура или принтер).
• содержимое файлов в С++ может быть представлено в текстовом и двоичном
(бинарном) виде.
12.
ОБЩИЙ АЛГОРИТМ РАБОТЫ С ФАЙЛАМИ• открытие потока;
• операции чтения/записи/смещения курсора…. обработка;
• закрытие потока
13.
РАБОТА С ФАЙЛАМИ В КЛАССИЧЕСКОМСТАНДАРТЕ С
ОПИСАНИЕ ФАЙЛОВОЙ ПЕРЕМЕННОЙ
FILE *fp;
FILE *fp1, *fp2;
ФАЙЛОВАЯ ПЕРЕМЕННАЯ - указатель на структуру типа FILE,
определённую в стандартной библиотеке
14.
ОТКРЫТЬ ФАЙЛFILE *fopen_s(ссылка на поток,char *имя_файла, char*режим_доступа)
Параметр имя_файла может содержать относительный или абсолютный путь
к открываемому файлу:
1) "data.txt" - открывается файл data.txt из текущей папки
2) "f:\\my.dat" - открывается файл my.dat из головной папки диска f:
3) имя файла запрашивается у пользователя:
Параметр режим_доступа определяет, какие действия будут разрешены с
открываемым файлом
FILE* fp1;
fopen_s(&fp1, "output.txt", "w");
15.
ПРОВЕРКА ОТКРЫТИЯ ФАЙЛАFILE* fp1;
if (fopen_s(&fp1, "output.txt", "w") == NULL)
printf("prodolzhaem ");
else { perror("output.txt"); exit(1); }
FILE* fp1;
errno_t err;
err = fopen_s(&fp1, "output.txt", "w");
if (err == NULL)
printf("prodolzhaem ");
else { perror("output.txt"); exit(1); }
16.
1. ПРИМЕР ПРОГРАММЫ РАБОТЫ СФАЙЛАМИ В КЛАССИЧЕСКОМ СТАНДАРТЕ С
#include <iostream>
using namespace std;
int main()
{FILE* fp1;
errno_t err;
err = fopen_s(&fp1, "output.txt", "w");
if (err == NULL)
printf("prodolzhaem ");
else { perror("output.txt"); exit(1); }
for (int i = 2; i <= 100; i += 3)
fprintf(fp1,"chislo -> %7d\t kvadrat->%10d\n",i,i *
i);
fclose(fp1);
system("pause");
17.
18.
2. ПРИМЕР ПРОГРАММЫ РАБОТЫ СФАЙЛАМИ В КЛАССИЧЕСКОМ СТАНДАРТЕ С
#include <iostream>
using namespace std;
int main()
{FILE* fp1;
if (fopen_s(&fp1, "input.txt", "r") == NULL) printf("prodolzhaem ");
else { perror("input.txt"); exit(1); }
int a, summa;
a = -1; summa = 0;
while (!(a == 0)) {
fscanf_s(fp1, "%d", &a); summa = summa + a;
}
printf("\n Summa = %d \n ", summa); fclose(fp1);
system("pause");
return 0;}
19.
3. ПРИМЕР ПРОГРАММЫ РАБОТЫ СФАЙЛАМИ В КЛАССИЧЕСКОМ СТАНДАРТЕ С
#include <iostream>
using namespace std;
int main()
{FILE* fp1;
if (fopen_s(&fp1, "input.txt", "r") == NULL) printf("prodolzhaem ");
else { perror("input.txt"); exit(1); }
int a, summa;
summa = 0;
while (!(feof(fp1))) {
fscanf_s(fp1, "%d", &a);
summa = summa + a;
// целый тип данных
}
printf("\n Summa = %d", summa); fclose(fp1);
system("pause");
20.
4. ПРИМЕР ПРОГРАММЫ РАБОТЫ СФАЙЛАМИ В КЛАССИЧЕСКОМ СТАНДАРТЕ С
#include <iostream>
using namespace std;
int main()
{FILE* fp1;
if (fopen_s(&fp1, "input.txt", "r") == NULL) printf("prodolzhaem ");
else { perror("input.txt"); exit(1); }
float a, summa=0;
while (!(feof(fp1))) {
fscanf_s(fp1, "%f", &a); summa = summa + a;
// вещественный тип данных
}
printf("\n Summa = %10.3f \n", summa); fclose(fp1);
system("pause");
return 0;}
21.
5. ПРИМЕР ПРОГРАММЫ РАБОТЫ СФАЙЛАМИ В КЛАССИЧЕСКОМ СТАНДАРТЕ С
#include <iostream>
using namespace std;
int main()
{FILE* fp1;
errno_t err;
err = fopen_s(&fp1, "input.txt", "r");
if (err == NULL)
printf("prodolzhaem ");
else { perror("output.txt"); exit(1); }
while (!(feof(fp1)))
{ char simv = fgetc(fp1);
printf("%c",simv);
}
fclose(fp1); printf("\n");
system("pause");
return 0;
}
22.
6. ПРИМЕР ПРОГРАММЫ РАБОТЫ СФАЙЛАМИ В КЛАССИЧЕСКОМ СТАНДАРТЕ С
#include <iostream>
using namespace std;
int main()
{FILE* fp1, *fp2;
errno_t err, err1;
err = fopen_s(&fp1,"input.txt", "r"); err1 = fopen_s(&fp2,“output.txt", “w");
if (err == NULL&&err1 == NULL) printf("prodolzhaem ");
else { perror("output.txt"); perror(“input.txt"); exit(1); }
while (!(feof(fp1)))
{ char simv = fgetc(fp1);
printf("%c",simv);
fprintf(fp2,"%c",simv);
}
fclose(fp1); printf("\n"); fclose(fp2);
system("pause");
return 0;
}
23.
7. ПРИМЕР ПРОГРАММЫ РАБОТЫ СФАЙЛАМИ В КЛАССИЧЕСКОМ СТАНДАРТЕ С
#include <iostream>
using namespace std;
int main()
{FILE* fp1;
errno_t err;
char stroka[255];
err = fopen_s(&fp1, "input.txt", "r");
if (err == NULL)
printf("prodolzhaem ");
else { perror("output.txt"); exit(1); }
while (fgets(stroka, 255, fp1) != NULL)
printf("%s", stroka);
fclose(fp1); printf("\n");
system("pause");
return 0;}
24.
ТОНКОСТИ РАБОТЫ С ТЕКСТОВЫМИ ФАЙЛАМИ1. Очередное чтение данных изменяет внутренний файловый указатель. Этот указатель в любой
момент времени, пока файл открыт, показывает на следующее значение, которое будет
прочитано.
2. При чтении данных в переменную целого типа поток контролирует соответствие данных в
файле. Количество пробелов между числами не влияет на корректность считывания данных.
3. При символьном чтении данных важен именно каждый символ и символы конца строки и
конца файла в том числе. Функция для считывания символа char simv = fgetc(имя потока);
4. При чтении строк данных важен именно каждый символ и символы конца строки и конца
файла в том числе.
Функция для считывания строки char stroka[255]; fgets(stroka, 255, fp1);
25.
Рекомендация:до всех #include включить директиву
#define _CRT_SECURE_NO_WARNINGS
Выбор способа чтения или записи данных: форматированный текст
(красивый)
Обмен данными выполняют методами:
fscanf - для чтения
fprintf - для записи
Перед чтением данных желательно очищать буфер от возможных
"остатков" предыдущего чтения
26.
РАБОТА С ФАЙЛАМИ В СТАНДАРТЕ С ++В стандартной библиотеке определен заголовочный файл fstream
Базовые типы для чтения и записи файлов:
ifstream для чтения из файла
ofstream для записи в файл
fstream
совмещает запись и чтение
27.
ОТКРЫТИЕ ФАЙЛОВФормат функции open() для работы с потоками
•open(путь)
•open(путь, режим)
режим открытия файлов задает член данных перечисляемого
типа open_mode, который определяется следующим образом:
enum open_mode {app, binary, in, out, trunc, ate};
ifstream file; file.open ("test.txt", ios::in | ios::binary);
ofstream file; file.open ("test.txt", ios::out | ios::app);
28.
СПИСОК ДОСТУПНЫХ РЕЖИМОВОТКРЫТИЯ ФАЙЛОВ
ios::in: файл открывается для ввода (чтения) (ifstream или fstream)
ios::out: файл открывается для вывода (записи) (ofstream или fstream)
ios::app: файл открывается для дозаписи. Старые данные не удаляются.
ios::binary: файл открывается в бинарном режиме
по умолчанию
для ofstream применяется режим ios::out,
для ifstream - режим ios::in.
ля объектов fstream совмещаются режимы ios::out и ios::in.
29.
ТИП IFSTREAM: ЧТЕНИЕ ФАЙЛОВМетод
open
Описание
get
Читает один или более символов из файла
getline
Читает символьную строку из текстового файла или данные из бинарного
файла до определенного ограничителя
read
Считывает заданное число байт из файла в память
eof
Возвращает ненулевое значение (true), когда указатель потока достигает
конца файла
peek
Выдает очередной символ потока, но не выбирает его
seekg
Перемещает указатель позиционирования файла в заданное положение
tellg
Возвращает текущее значение указателя позиционирования файла
close
Закрывает файл
Открывает файл для чтения
30.
ТИП ofstream: ЗАПИСЬ ФАЙЛОВМетод
open
put
write
seekp
tellp
Close
Описание
Открывает файл для записи
Записывает одиночный символ в файл
Записывает заданное число байт из памяти в файл
Перемещает указатель позиционирования в указанное
положение
Возвращает текущее значение указателя позиционирования
файла
Закрывает файл
31.
ОПЕРАТОРЫ ВКЛЮЧЕНИЯ И ИЗВЛЕЧЕНИЯОператор извлечения (>>) пересылает данные из потока в переменные
оперативной памяти
ifstream file ("Temp.txt");
char buff[100]; int
vx; file >> buff >> vx;
Оператор включения (<<) записывает данные в файловый поток
file << "Это строка текста";
file << "Это " << "строка " << "текста";
file << "Это строка текста" << endl;
32.
8. ПРИМЕР ПРОГРАММЫ РАБОТЫ СФАЙЛАМИ В СТАНДАРТЕ С ++
#include <iostream>
#include <fstream>
using namespace std;
int main()
{ifstream input;input.open("input.txt", ios::in);
int chislo, summa = 0, kolic = 0;
if (input.good())
{while (input>>chislo)
{ kolic++; summa += chislo;}
cout << "k= " << kolic << " sum = " << summa << endl;
float s_ar = static_cast <float> (summa/kolic);
input.clear(); input.seekg(0); kolic = 0;
while (input >> chislo)
{ if (chislo>s_ar ) kolic++; }
cout << "Takich chisel = " << kolic << endl;
input.close(); }
else cout << “PROBLEM!!!! “;
system("pause");
return 0;
}
// 1
// 2
// 3
// 4
33.
9. ПРИМЕР ПРОГРАММЫ РАБОТЫ СФАЙЛАМИ В СТАНДАРТЕ С ++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{ifstream inp("input.txt", ios::in);
string stroka, max_stroka;
if(inp.is_open())
{ inp >> stroka; max_stroka = stroka;
while (!(inp.eof()))
{
inp >> stroka;
if ( stroka>max_stroka) max_stroka = stroka;
}
cout << max_stroka;
}
system("pause");return 0;}
34.
9. ПРИМЕР ПРОГРАММЫ РАБОТЫ СФАЙЛАМИ В СТАНДАРТЕ С ++
35.
#include <iostream>#include <fstream>
#include <string>
using namespace std;
int main()
{
10. ФАЙЛЫ В СТАНДАРТЕ С ++
ifstream inp("input.txt", ios::in);
string stroka, max_stroka;
if(inp.is_open())
{ getline(inp,stroka); max_stroka = stroka;
while (!(inp.eof()))
{getline(inp,stroka);
int a = stroka.size(); int b =
max_stroka.size();
if (a>b)
max_stroka = stroka;
}
cout << max_stroka<< endl;
}
36.
10. ПРИМЕР ПРОГРАММЫ РАБОТЫ СФАЙЛАМИ В СТАНДАРТЕ С ++
programming