file handling in c

39
Файловый ввод/вывод на ‘C’

Upload: maxim-shaptala

Post on 22-May-2015

72 views

Category:

Education


2 download

DESCRIPTION

About file handing in c

TRANSCRIPT

Page 1: file handling in c

Файловый ввод/вывод на

‘C’

Page 2: file handling in c

Что такое файл?Файлом можно назвать месторасположение потоков битов.

Он может быть находиться в одном месте или в нескольких местах, но он представляется одним потоком.

Page 3: file handling in c

Что такое поток?Поток не связан с железом, это линейная очередь которая связывает файл с программой посредством которого возможно передавать данные в оба направления. Таким образом, он не зависит от устройства которое мы используем.Мы также можем определить поток как источник данных.

Этим источником могут быть (a) Файл(b) Жесткий диск, флеш накопитель, CD, DVD и т.д.(c) Другие устройства ввода/вывода (принтер, дисплей и т.д.) В языке С существуют два типа потока. (a) Текстовые потоки(b) Бинарные (двоичные) потоки

Page 4: file handling in c

Что такое буфер?

Буфер – это техника, которая позволяет уменьшить количество вызовов ввода/вывода.

Page 5: file handling in c

Базовые операции с файлами

• Открытие файла• Чтение данных из файла• Запись данных в файл• Закрытие файла

Page 6: file handling in c

Открытие файла• Файл должен быть“открыт” перед тем, как выполнять

операции ввода/выводаFILE *fp;

: fp = fopen (filename, mode);o fp объявление указателя на тип данных FILE.o filename это строка, указывающая на путь и имя файла.o fopen возвращает указатель на файл. o mode это строка, которая указывает на цель открытия файла:

“r” :: только для чтения“w” :: только для записи“a” :: для добавление данных в файл“rb” :: только для чтения в бинарном режиме“wb” :: только для записи в бинарном режиме“ab” :: для добавление данных в файл в бинарном режиме“r+” :: открытие для чтения и записи“w+” :: для записи, если нет, то создает

Page 7: file handling in c

Закрытие файла• После того, как все операции с файлом

были выполнены, он должен быть закрытo Обеспечив это все данные, которые находятся в буфере памяти

будут соответственно записаны в файл.

• Общий формат: fclose (file_pointer) ; FILE *xyz ; xyz = fopen (“test”, “w”) ; ……. fclose (xyz) ;

Page 8: file handling in c

Создание файла#include<сstdio>

main(){

FILE *p;p = fopen(“abcd.txt", "w");if(p) {

printf("created");}else {

printf("not created");}fclose(p);

}

#pragma warning(disable : 4996)

Page 9: file handling in c

Операции чтения/записи в

файл.1

• Простые функции чтения/записи getc и putc.• getc используется для чтения очередного

символа из файла и возвращает его.char ch; FILE *fp;…..ch = getc (fp) ;

o getc возвратит маркер EOF, когда конец файла будет достигнут.

• putc используется для записи символа в файл.char ch; FILE *fp;……putc (c, fp) ;

Page 10: file handling in c

Операции чтения/записи в

файл.2

• Функции чтения/записи fgets и fputs.• fgets считывает строку начиная с текущей позиции.

FILE *fp;…..char *fgets( char *string, int max_count, FILE *fp) ;

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

• fputs записывает строку в файл, начиная с текущей позиции.

FILE *fp;……int fputs( const char *string, FILE *stream )

o если функция отрабатывает успешно из неё возвращается неотрицательное значение. При ошибке возвращается EOF.

Page 11: file handling in c

Операции чтения/записи в

файл.3

• Функции чтения/записи fread и fwrite.• fread считывает данные из файла в буфер.

size_t fread( void *buffer, size_t size, size_t count, FILE *fp) ;

o buffer - адрес массива, куда запишутся данныеo size - размер элемента массива в байтахo count - максимальное количество элементов для

считывания

• fwrite записывает массив данных в файл.size_t fwrite( const void *buffer, size_t size, size_t count,

FILE *fp);

Page 12: file handling in c

Операции чтения/записи в

файл.4• Мы также можем использовать файловые

версии функций scanf и printf, называемые fscanf и fprintf.

• Общий формат: fscanf (FILE *pf, char *string, list) ; fprintf (FILE *fp, char *string, list) ;

• Пример:fscanf (fp, “%d %s %f”, &roll, dept_code, &cgpa) ;fprintf (out, “\nThe result is: %d”, xyz) ;

Page 13: file handling in c

Запись в файл#include<stdio.h>int main(){

FILE *p;

p=fopen(“file1.txt","w");if(p) {

printf("opened\n");fputs("hello i am a student",p);

}else {

printf("not opened\n");exit(1);

}fclose(p);return 0;

}

Page 14: file handling in c

Открыть файл в программе по

умолчанию// мы можем открыть любой файл в программе// которая связана с этим файлом//Например- ppt,txt,jpg,mp3 etc.#include<cstdlib>main(){

system(“D:\\abcd\\xyz.mp3");}Представленный код будет проигрывать файл xyz.mp3 в Windows Media Player(программа по умолчанию) Расположенный на диске D в папке abcd

Page 15: file handling in c

Создание, Запись и Чтение файла

Вместе.1//Эта программа демонстрирует создание, запись и чтение файла вместе#include<cstdio>int main(){

FILE *fp;char t; //созданиеfp=fopen("yashuu.txt","w");if(fp) {

printf("created\n"); }else {

printf("not created\n");exit(1);

} //записьfputs("this is yashu", fp);fcolse(fp);

Page 16: file handling in c

Создание, Запись и Чтение файла

Вместе.2//чтение

y=fopen("yashuu.txt","r");if(fp) {

printf("opened\n"); }else {

printf("not opened\n");exit(1);

}while((t=fgetc(y))!=EOF) {

//fgetc используется для чтение //символа из файлаprintf("%c",t);

}fclose(y);return 0;

}

Page 17: file handling in c

Подсчет количества

символов в файле#include<cstdio>int main(){

FILE *fp;int count = 0;char ch;fp = fopen("hh.txt","r");while(ch=fgetc(fp))!=EOF) {

count++;}

printf("%d",count);fclose(fp);return 0;

}

Page 18: file handling in c

Подсчет количества строк в

файле#include<cstdio>int main(){

FILE *fp;int count=0;char buffer[256];fp=fopen("yy.txt","r");while(feof(fp)) {fgets(buffer, 256, fp);count++;}count++;printf("%d",count);fclose(fp);return 0;

}

Page 19: file handling in c

Подсчет количества слов в

файле#include<cstdio>int main(){

int count=0;char ch;FILE *fp;y=fopen("fight.txt","r");while((ch=fgetc(fp))!=EOF) {

if(ch==32) {count++;

} }count++;printf("%d",count);fclose(fp);return 0;

}

Page 20: file handling in c

Добавить данные в файл

#include<cstdio>int main(){

FILE *fp;char a;p=fopen("yashu65.txt","a");if(fp) {printf("opened\n");fputs("hello i m yashu\n",fp);} else {printf("not opened\n");exit(1);}fclose(fp);return 0;

}

Page 21: file handling in c

Введение в fseek().1

Устанавливает позицию смещение потока .

Page 22: file handling in c

Введение в fseek().2

int fseek ( FILE *stream, int offset [, int whence] )Параметры• stream -- указатель на открытый файл.• offset -- смещение, измеряемое в байтах от

начала файла.• whence -- точка, от которой производится

смещение:

Page 23: file handling in c

Введение fseek().3

Константа Описание

SEEK_SET Начало файла

SEEK_CUR Текущая позиция

SEEK_END Конец файла

Page 24: file handling in c

Введение в fseek().4

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

Page 25: file handling in c

fseek() считать с 6й позиции

#include <cstdio>main (){ FILE *fp; char c; fp = fopen("file.txt","r"); fseek( fp, 5, SEEK_SET ); while((c=fgetc(fp))!=EOF) { printf("%c",c); } fclose(fp);}

Page 26: file handling in c

fseek() пример перезаписи

#include <сstdio>main (){ FILE *fp;  fp = fopen("file.txt","w"); fputs("This is krish", fp);  fseek( fp, 2, SEEK_SET ); fputs("at", fp); fclose(fp);}

Page 27: file handling in c

fseek() пример для SEEK_SET.1

В примере использования файла ‘abc.txt’ содержащего “abcdefghijklmnopqrstuvwxyz”

константа SEEK_SET используется для отсчета с начала файла#include<cstdio>#include<cstring>main(){ FILE *fp=fopen("abc.txt","r"); char b; int i; // пропускаем первые 5 символов используя цикл for(i=0;i<5;i++) { b=fgetc(fp); }

Page 28: file handling in c

fseek() пример для SEEK_SET.2

h

fseek(y,sizeof(char)*7,SEEK_SET);b=fgetc(fp);printf("%c",b);fclose(fp);

}Вывод программы–

Потому, что пропускается 7 символов с начала и 8й символ в этом файле ‘h’

Page 29: file handling in c

fseek() пример для SEEK_CUR.1

В примере использования файла ‘abc.txt’ содержащего “abcdefghijklmnopqrstuvwxyz”

•Константа SEEK_CUR отсчитывает с текущей позиции файла•#include<cstdio>•#include<cstring>•main()•{• FILE *y=fopen("abc.txt","r");• char b;• int i;• //пропустить 5 символов используя цикл• for(i=0;i<5;i++)• {• b=fgetc(y);• }

Page 30: file handling in c

fseek() пример дляSEEK_CUR.2

fseek(y, sizeof(char)*7,SEEK_CUR); b=fgetc(y); printf("%c",b); }

Вывод программы –

Потому, что пропускаются 7 символов с текущей позиции, которой является 5; значит 5+7 = 12 символов пропущено. 13й символ - это ‘m’.

m

Page 31: file handling in c

fseek() пример для SEEK_END

В примере использования файла ‘abc.txt’ содержащего “abcdefghijklmnopqrstuvwxyz”

SEEK_END устанавливает указатель в конец файла#include<сstdio>#include<сstring>main(){ FILE *fp=fopen("abc.txt","r"); char b; fseek(y,-10,SEEK_END); b=fgetc(y); printf("%c",b); }

Вывод программы – q

-10 значит 10-ая позиция с конца, которая есть ‘q’.

Page 32: file handling in c

Пример для ftell() #include <сstdio>main (){ FILE *fp; char c; fp = fopen("file.txt","r"); fseek( fp, 5, SEEK_SET ); while((c=fgetc(fp))!=EOF) { printf("%c - position : %d\n",c,ftell(fp)); } fclose(fp);}

Page 33: file handling in c

Считывание числа из файла

#include<сstdio>main(){

FILE *p;int sum=0,number;p=fopen("kl.txt","r");if(p==NULL) {

printf("file not opened ");} else {

while(!feof(p)) { fscanf(p,"%d",&number); printf("%d\n",number); sum=sum+number;}printf("%d",sum);fclose(p);

}}

Page 34: file handling in c

Переименование файла

#include <сstdio>main(){

int result; char oldname[] ="rt.txt"; char newname[] ="network.txt"; result= rename( oldname , newname ); if ( result == 0 ) { puts ( "File successfully renamed" ); } else { perror( "Error renaming file" );

}}

Page 35: file handling in c

Удаление файла#include <сstdio>main (){ if( remove( "debug.log" ) != 0 ) { perror( "Error deleting file" ); } else { puts( "File successfully deleted" ); }}

Page 36: file handling in c

Создание директорий

#include<cstdlib>#include<cstdio>main(){

//если директория существует – возвращает true, // иначе - falseint a=system("mkdir d:\\vikas\\abcd");// int a = _mkdir(“d:\\vikas\\abcd”)if(a) {

printf("folder not created");} else {

printf("folder created");}

}

Page 37: file handling in c

Переименование директорий

#include <stdio.h>main(){ int result; char oldname[] ="faltu"; char newname[] ="faltu2"; result= rename( oldname , newname ); if ( result == 0 ) { puts ( "Folder successfully renamed" ); } else { perror( "Error renaming Folder" ); }}

Page 38: file handling in c

Вывод содержимого директории

#include<cstdio>main(){

system("dir d:\\fca\\");}

Page 39: file handling in c

Удаление директорий

#include <stdio.h>main (){

// int a = _rmdir(“d:\\vikas\\abcd”); if( system("rmdir rt") ) { perror( "Error deleting folder" ); } else { puts( "Folder successfully deleted" ); }

}