Конспект лекций Часть II одесса, 2003


fclose (указатель_файла)  Для работы с файлами используются следующие функции:  fprintf


Download 0.65 Mb.
Pdf ko'rish
bet12/26
Sana17.06.2023
Hajmi0.65 Mb.
#1526920
TuriКонспект
1   ...   8   9   10   11   12   13   14   15   ...   26
Bog'liq
atki188 c konspekt 2

fclose (указатель_файла) 
Для работы с файлами используются следующие функции: 
fprintf - форматированный вывод в файл, связанный с потоком. При 
этом файл должен быть открыт как текстовый, в режиме, допускающем за-
пись. Синтаксис: 
int fprintf (FILE *Поток, Формат, СписокПеременных); 
fscanf – форматированное чтение значений переменных из файла
связанного с потоком. Файл должен быть открыт как текстовый в режиме, 
допускающем чтение. Синтаксис: 
int fscanf (FILE *Поток, const char* Формат, СписокАдр); 


Одесский колледж компьютерных технологий “СЕРВЕР” 
21
fgets – читает из потока символы и записывает их в строку. Чтение 
заканчивается, если прочитан символ с номером КолСимволов-1 или если 
очередной символ является символом новой строки. Прочитанный из файла 
символ новой строки заменяется нулевым символом. Синтаксис: 
char* fgets (char * Строка, int КолСимволов, FILE *Поток); 
fputs – записывает в поток строку символов. Символ конца строки
нуль-символ, в поток не записывается. Синтаксис: 
char* fputs (char * Строка, FILE *Поток); 
feof – возвращает нулевое значение, если в результате выполнения 
последней операции чтения из потока достигнут конец файла. Синтаксис: 
int feof (FILE *Поток); 
Все эти функции описаны в заголовочном файле 
Как было сказано ранее, файл может быть открыт в текстовом или 
двоичном (бинарном) режиме. В отличие от текстового файла, в бинарном 
можно хранить структуры в их нормальном виде. Преимущество бинарных 
файлов состоит в том, что при чтении/записи не тратится время на преобра-
зование данных из символьной формы представления во внутреннюю и об-
ратно, при этом не происходит потери точности вещественных чисел. Кроме 
того, при работе с бинарными файлами применяется прямой доступ к инфор-
мации путём установки текущей позиции указателя. Это даёт возможность 
быстрого получения и изменения отдельных данных файла. 
Чтение/запись в бинарный файл выполняется с помощью функций 
библиотеки fread и fwrite: 
size_t fwrite(const void *p, size_t size, size_t n, FILE *f); 
Функция fwrite записывает n элементов длиной size байт из буфера, заданно-
го указателем p, в поток а. Возвращает число записанных аргументов. 
size_t fread(void *p, size_t size, size_t n, FILE *f); 
Функция fread считывает n элементов длиной size байт в буфер, заданный 
указателем p, из потока f. Возвращает число считанных элементов, которое 
может быть меньше, чем запрошенное. 
Пример работы с файлами: 
Допустим, что в файле хранятся сведения о мониторах. В каждой 
строке указан тип, оптовая и розничная цены и примечание. Для простоты 
данные в каждой строке записаны единообразно: первые 20 символов зани-
мает тип монитора, далее по 5 символов целые числа, представляющие опто-
вую и розничную цены, затем примечание длиной не более 40 символов. 
Приведенная ниже программа построчно считывает данные из тек-
стового файла в буферную переменную s, затем формирует из них структуру 
mon и записывает её в двоичном режиме в выходной файл. Далее иллюстри-
руется считывание из этого файла произвольной записи. 
#include  
#include  


Одесский колледж компьютерных технологий “СЕРВЕР” 
22
#include  
#include  
int main(){ 
FILE 
*fi, 
*fo; 
if ((fi = fopen (“d:\\c\\file.txt”, “r”)) == 0){ 
cout << “Ошибка открытия входного файла”; return 1;} 
if ((fo = fopen (“d:\\c\\binfile.txt”, “w+b”)) == 0){ 
cout << “Ошибка открытия входного файла”; return 1;} 
const int d1 = 80; 
char 
s[d1]; 
struct{ 
char type[20];
int opt, rozn; 
char comm [40]; 

mon; 
int kol = 0; 
//Количество записей в файле 
while(fgets(s, d1, fi)){ 
//Преобразование строки в структуру: 
strncpy(mon.type, 
s,19); 
mon.type[19] 

‘\0’; 
mon.opt = atoi(&s[20]); 
mon.rozn = atoi(&s[25]); 
strncpy (mon.comm, &s[30], 40); 
fwrite (&mon, sizeof mon, 1, fo); 
kol++; 

fclose(fi); 
int i; cin >> i; 
//Номер записи 
if (i >= kol){cout <<”Запись не существует”; return 1;} 
//Установка указателя текущей позиции файла на запись i: 
fseek(fo, (sizeof mon)*i, SEEK_SET); 
fread(&mon, sizeof mon, 1,fo); 
cout<<“mon.type “<<fclose(fo); 
return 
0; 

В С++ библиотека  поддерживает чтение и запись в файл. Все 
операции, применимые к стандартному вводу/выводу, могут быть применены 
к файлам. Чтобы использовать файл для ввода или вывода, необходимо 
включить в программу заголовочный файл .


Одесский колледж компьютерных технологий “СЕРВЕР” 
23
Использование файлов в программе предполагает следующие опера-
ции: 
• создание потока; 
• открытие потока и связывание его с файлом; 
• обмен (ввод/вывод); 
уничтожение потока
• закрытие файла. 
Перед тем, как открыть файл для вывода, необходимо объявить объ-
ект типа ofstream: 
ofstream outfile (“ name-of-file”); 
Проверить, удалось ли нам открыть файл можно следующим образом: 
if (! outfile )
//false, если файл не открыт 
cerr 
<< 
“Ошибка открытия файла.\n” 
Так же открывается файл и для ввода, только он имеет тип ifstream: 
ifstream infile (“ name-of-file”); 
if (! infile) 
//false, если файл не открыт 
cerr 
<< 
“Ошибка открытия файла.\n” 
Полный формат команд открытия файла имеет вид: 
ifstream (const char *name, int mode – ios::in); 
//:: - доступ к ios 
ofstream(const char *name, int mode – ios::out | ios::trunc); 
Вторым параметром является режим открытия файла: 
in 

0x01 //Открыть для чтения 
out = 0x02 
//Открыть для записи 
ate = 0x04 
//Установить указатель на конец файла 
app 

0x08 
//Открыть для добавления в конец 
trunk 

0x10 
//Если файл существует, удалить 
nocreate 

0x20 
//Если файл не существует, выдать ошибку 
noreplace 
=0x40 
//Если файл существует, выдать ошибку 
binary 

0x80 
//Открыть в двоичном режиме 

Download 0.65 Mb.

Do'stlaringiz bilan baham:
1   ...   8   9   10   11   12   13   14   15   ...   26




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling