Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорная техника.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
5.93 Mб
Скачать

Операции с файлами.

Файл – порция данных, имеющая уникальное имя.

При работе с файлами используют понятие “ потока ”. Т.е. язык CI рассматривает данные в виде потока, поступающ. Последовательно друг за другом.

Буфер – участок памяти, кот. использ. при обмене данные между файлами и программой.

Stdin – входной поток ( с клавиатуры )

Stdout – стандартный поток вывода ( дисплей )

Stderr – станд. Поток сообщения об ошибках ( дисплей )

Stdprn – вывод на принтер

Stdaux – станд. поток вспомогательного устройства.

При операции с файлами использ. понятие “ файловая структура ”, FILE. В ней несколько полей кот. определяют все действия с файлами.

Чтобы использовать файлов. Структуру на неё надо создать.

FILE * имя_указателя;

FILE * fp;

FILE * fin, * fout;

Fopen () – открытие файла в < stdio.h >

Int fopen ( “ имя_файла ”,” режим_доступа ” )

R – файл только для чтения

W – для записи ( все имеющиеся данные стираются )

A – для добавления данных

R+} для чтения и для записи

W+}

T – текстовый режим доступа к файлу

B – двоичный режим доступа к файлу

Ф-ция fopen () возвращает значение: если произошла ошибка, то возвращает null – файл не открыт

FILE * fp;

Fp = fopen ( “ Мой_файл ”, “ W ” );

Fp = fopen ( “ a: \ myfiledat ”, “ W ” );

If (( fp = fopen ( “ myfile ”, “ W ”)) = NUUL )

{

puts ( “ Не возможно открыть файл ” );

return 1;

}

Закрытие файла осуществляется ф-цией:

Fclose ( имя_указателя );

FILE *fp;

….

Fclose ( fp );

Fcloseall () – закрывает все открытые файлы

При чтении или записи в файл использ. спец. указатель чтение_записи.

0

1

2

3

4

5

6

7

+

+

+

Начало Конец

Указатель определяет номер байта при чтении или записи, при достижении конца файла возвращается символ EOF, поэтому программа должна контролировать появление этого символа. При записи система автоматически определяет конец файла.

Обмен инф-ции с файлами.

Приём инф-ции с файла – чтение ( ввод ), передача инф-ции в файл – запись (вывод ).Все операции чтение – записи делят. на 4 группы.

1. Операции посимвольного ввода – вывода.

2. построеового ввода – вывода.

3. Форматированного ввода – вывода.

4. Блокового ввода – вывода.

  1. производят запись или приём одного символа.

Fgetc () – чтение из файла

Fputc () – запись в файл

Int fputc ( символ, указатель_на_файл );

Эта ф-ция возвращает код символа, а если ошибка – EOF

Пример:

# include < stdio.h >

main ()

{

FILE *fp;

Char letter;

If (( fp = fopen ( “ myfile ”,” W ” )) == NULL );

{

puts ( “ Невозможно открыть файл ” );

return 1;

}

do

}

letter = getchar ();

}

fputc ( letter, fp );

while ( letter ! = ‘ \ n ’ );

fclose ( fp );

return 0;

}

int fgetc ( указатель_на_файл );

ф-ция извлекает из файла символ и возвращает его, если ошибка возвращает – EOF

Пример:

# include < stdio.h >

main ()

{

FILE *fp;

Char better;

If (( fp = fopen ( “ myfilo ”, “ r ” ) / == NULL )

{

puts ( “ Невозможно открыть файл ” );

return 1;

}

while ( better = fgetc ( fp ) ! = EOF )

printf ( “ % c ”, better);

fclose ( fp );

return 0;

}

int feof ( указатель_на_файл )

возвращает не 0, если конец файла достигнут и 0 в противном случае.

Fputc.cpp

A: \ fputc.cpp

Пример: копирование

# include < stdio.h >

main ()

{

File *in, *out;

If (( in = fopen ( “ fputc.cpp ”, “ r ” )) ==NULL )

{

puts ( “ Невозможно открыть файл fputc.cpp” );

return 1;

}

if // out = fopen ( “ a: \ fputc.cpp ” )) = NULL )

{

puts ( “ Невозможно открыть файл a: \ fputc.cpp ” );

return 1;

}

while ( ! feot ( in ))

fputc ( fgetc ( in ), out );

fclose ( out );

return 0;

}

2 .fputs () – запись в файл строки

fgets () – чтение из файла строки.

Int fputs ( строка указатель_на_файл );

Записывает в файл строку до тех пор, пока не будет ‘ \ o ’ ( сам этот символ в строку не вносится).

Если при записи был достигнут конец файла, то эта ф-ция возвращает NULL.

Пример: / *fputs.cpp * /

# include < stdio.h >

# include < string.h >

main ()

{

FILE *fp;

Char name [ 40 ];

If (( = fopen ( “ myfile ”, ” W ” )) == NUUL )

{

puts ( “ Невозможно открыть файл ” );

return 1;

}

printf ( “ Введите имя ” )

gets ( name);

while ( strlen ( name ) > 0 )

{

fputs ( name, fp );

fputs ( “ \ n ”, fp );

printf ( “ Введите имя : ” );

gets ( name );

}

/ *

для выхода – нажать Enter * /

fclose ( fp);

return 0;

}

int fgets ( строка, длина_строки, указатель_на_файл );

Длина_строки – число символов, кот. надо считать

Ф-ция возвращает символы строки и возвращает NULL в случае, когда достигнут конец файла или прочитано указанное число символов.

Пример: / *fgets.cpp * /

# include < stdio.h >

main ()

{

FILE * fp;

Char name [ 40 ];

If (( fp = fopen ( “ myfilo ”, ” r ” )) ==NUUL )

{

puts ( “ Невозможно открыть файл ” );

return 1;

}

while ( name, 40, fp ) ==NUUL )

gets ( name );

fclose ( fp );

return 0;

}

3 Ф-ции форматированного ввода-вывода;

fprintf () – ф-ция формат. записи

аысфта () – ф-ция формат. чтения

ште азкштеа ( указатель_но_файл, форматная строка, список_аргументов )

форматн. строка – текст и идентификаторы

В случае неуспешной записи в файл возвращает EOF

Int fscanf ( указатель_на_файл, форматная_строка, список_аргументов )

Пример: / * fprintf.cpp * /

# include < stdio.h >

# include < string.h >

main ()

{

FILE * fp;

Char filename [ 15 ];

Char product [ 20 ];

Float cost;

Int quantity;

Printf ( “ Введите имя файла, которой хотите создать: ” );

Gets ( name );

If (( fp = fopen ( name, “ W ” )) ==NUUL ))

{

printf ( “ Невозм. Откр. Файл %s \ n”, name );

return 1;

}

printf ( “ Введите назв. товара ” );

gets ( product );

while ( strlen ( product ) > 0 )

{

printf ( “ Введите стоимость товара: ” );

fflush ( stain );

scanf ( “ % f ”, & cost );

printf ( “ Введите кол-во товара: ” );

fflust ( stdin );

scanf ( “ % d ”, & quantity );

fprintf ( fp, “ % s % f % d “, product, cost, quantity );

printf ( “ Введите название товара: ” );

fflust ( stdin );

gets ( product );

}

fclose ( fp );

return 0;

}

/ * fscant.cpp * /

# include < stdio.h >

main ()

{

FILE * fp;

Char name [ 15 ];

Char product [ 40 ];

Float cost;

Int quantity;

Printf ( “ Введите имя файла: ” );

Gets ( name );

If (( fp = fopen ( name, “ r ” )) ==NUUL )

{

printf ( “ Невозм. открыт. файла % s \ n ”, name );

return 1;

}

while ( fscanf ( fp, “ % s % f % d ”, product, & cost, & quantity )=(EOF)

{

printf ( “ Название товара: % s \ n ” , product );

printf ( “ Стоимость % 2 f \ n ”, cost );

printf ( “ Кол-во % d \ n ”, quantity );

}

fclose ( fp );

return 0;

}

fscanf () не позволяет читать строки с пробелами. При вводе или выводе файла в формате, несоотв. спецификатору, эти ф-ции выдают ошибки.