336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. 파일 개방시 실패 이유를 출력 하여 줍니다.


2. 원형 : void perror(const char* string); 

-string 값에 파일 개방 경로를 넣어 주면 유용할수 있습니다.




소스코드 : main.c


#include <stdio.h>


int main(void)

{

FILE *fp;

int ch;


fopen_s(&fp, "C:\\Users\\junmo\\Desktop\\300\\116\\file.txt", "r");


if (fp == NULL)

{

perror("C:\\Users\\junmo\\Desktop\\300\\116\\file.txt, 파일 읽기 모드 실패");

}

else

{

fclose(fp);

}



system("pause");

return 0;

}




결과 :



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. 파일을 읽거나 쓸 때 에러가 발생 했는지 유무를 검사합니다.


2. 원형 : int ferror(FILE *stream)



소스코드 : main.c


#include<stdio.h>


int main(void)

{

FILE *fp;


int ch;


fopen_s(&fp, "C:\\Users\\junmo\\Desktop\\300\\115\\file.txt", "w+");


if (fp == NULL)

{

puts("쓰기 모드 파일 생성 실패");

}

else

{

fprintf(fp, "%s", "this is text file");


fclose(fp);

}


fopen_s(&fp, "C:\\Users\\junmo\\Desktop\\300\\115\\file.txt", "r");


if (fp == NULL)

{

puts("읽기 모드 파일 생성 실패");

}

else

{

while (!feof(fp))

{

ch = fgetc(fp);

if (ferror(fp))

{

puts("파일 읽기 중 에러가 발생 하였습니다.");

}

else

{

printf("읽은 문자 : %c \n", ch);

}

}


fclose(fp);

}


system("pause");

return 0;

}




결과


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 :


1. 파일 닫기  함수 원형과 설명 : int fclose(FILE *stream)

-파일 fopen함수를 사용하여 메모리 할당 했다면  fclose 로 할당된 메모리를 해제 해준다.

-현재 실행중인 프로그램이 개방한 여러개의 파일을 한 번에 모두 닫으려면 fcloseall() 함수를 사용 할 수 있다.


2. 파일 끝을 체크하는 함수 원형 : int feof(FILE *stream)

-파일끝에 도달하지 않으면 0을 반환.

-파일끝에 도달하면 0이 아닌 값을 반환.



소스코드 : main.c


#include<stdio.h>


int main(void)

{

FILE *fp;

int ch;


//파일 만들어 쓰기 모드로 열어라

fopen_s(&fp,"C:\\Users\\junmo\\Desktop\\300\\114\\file.txt", "w+");


if (fp) // 파일 만들어 쓰기로 열렸다면 

{

fprintf_s(fp, "%s", "This is Test File"); // 텍스트 입력

if (fp) //파일이 있다면 

{

fclose(fp); // 파일을 닫어라.

}


fopen_s(&fp, "C:\\Users\\junmo\\Desktop\\300\\114\\file.txt", "r"); //파일 읽기 모드로 열어라


if (fp)//파일 읽기 모드로 열기 성공했다면

{

while (!feof(fp)) // 파일의 끝에 도달하지 않았다면

{

ch = fgetc(fp);// 문자 하나를 가저와 ch에 값을 복사 한뒤


printf_s("read character : %c \n", ch); // 화면에 출력한다.

}


if (fp) //파일이 열려 있다면

{

fclose(fp);//파일을 닫어라.

}

}


}


system("pause"); // 시스템 대기


return 0;

}


결과 :



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. fseek 함수를 대체 하여 fsetpos를 사용할 수 있다.


2. ftell 함수를 대체 하여 fgetpos를 사용할 수 있다.


3. fpos_t 형 자료를 쓰며 정수를 기록할수 있고 기준 점은 첫 시작 포인터 이다


4. write 모드 에서 사용해야 한다.


5. 원형 


int fgetpos(FILE *stream, fpos_t *pos)


int fsetpos(FILE *stream, const fpos_t *pos)




소스코드: main.c


#include <stdio.h>




void main(void)


{


int returnValue = 0;


FILE *write = 0, *read = 0;

fpos_t pos = 0 , move = 0;


char szBuffer[256] = { 0, };




fopen_s(&write, "E:\\300\\113\\file.txt", "w+");




if (write == NULL)


{


puts("fail : create file");


}


else


{

fgetpos(write, &pos);


printf_s("기록 전 파일 포인터의 위치 : %d\n", pos );


fputs("write text", write);


puts("write text");


fgetpos(write, &pos);


printf_s("기록 후 파일 포인터의 위치 : %d\n", pos);




puts("fset pos 를 이용해 파일 위치를 처음 이동");


move = 0;

fsetpos(write, &move);


//returnValue = fseek(write, 6, SEEK_SET);

move = 6;

fsetpos(write, &move);


fgetpos(write, &pos);

printf_s(" fsetpos : move (6), 호출 후 파일 포인터의 위치 : %d\n", pos);


fputs("call fsetpos : 6 ", write);


fgetpos(write, &pos);


printf_s("마지막 포인터 위치 : %d \n", pos);


fclose(write);



// 파일 읽기 모두로 생성하여  확인


fopen_s(&read, "E:\\300\\113\\file.txt", "r");


if (read == NULL)


{


puts("faild read file");


}


else


{


fgets(szBuffer, sizeof(szBuffer), read);


puts(szBuffer);


fclose(read);


}


}

}




결과





#파일포인터구하기,#fsetpos,#fgetpos,#프로그램입문,#c언어,#c언어입문

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. 파일 포인터를 내마음 대로 옮길수 있다.


2. 파일 끝부분 이상으로 기록할 경우. 파일 끝 다음으로 기록되어 의도하지 않게 값이 저장 안 될 수 있다.


3. 원형 과 파라메터 

     int fseek( FILE *stream, long offset, int origin)

stream :  파일

offset : 파일 포인터의 이동값(1 칸이 1byte)

origin : 어디서 부터 포일 포인터를 움직일지에 대한 플래그 값


origin 에 들어 갈수 있는 값

SEEK_SET (값 : 0) : 파일 포인터를 처음으로 부터

SEEK_CUR (값 : 1) : 현재 파일 포인터가 있는 곳 부터

SEEK_END (값 : 2) : 파일 끝부분 부터



offset 값은 - 와 + 부호를 가지고 전진과 후진을 할 수 있다.


example :

fseek(write, -3, SEEK_END)

-파일 끝부분 부터 처음 방향으로 3칸 간다.



fseek(write, 0, SEEK_SET)

-파일 포인터를 처음으로부터 끝방향으로 0칸 간다.



fseek(write, 8, SEEK_CUR)

-현재 파일 포인터가 있는 곳 부터 끝방향으로 8칸 간다.





소스 코드 : main.c

#include <stdio.h>


void main(void)

{

int returnValue = 0;

FILE *write = 0, *read = 0;

char szBuffer[256] = { 0, };


fopen_s(&write, "E:\\300\\112\\file.txt", "w+");


if (write == NULL)

{

puts("fail : create file");

}

else

{

printf_s("기록 전 파일 포인터의 위치 : %d\n", ftell(write));

fputs("write text", write);

puts("write text");

printf_s("기록 후 파일 포인터의 위치 : %d\n", ftell(write));


puts(" 파일 위치를 처음 이동");

returnValue =fseek(write, 6, SEEK_SET);


printf_s(" call fseek : 6, SEEK_SET 호출 후 파일 포인터의 위치 : %d\n", ftell(write));

fputs("call fseek : 6, SEEK_SET  ", write);

fclose(write);



// 파일 읽기 모두로 생성하여  확인

fopen_s(&read, "E:\\300\\112\\file.txt", "r");

if (read == NULL)

{

puts("faild read file");

}

else

{

fgets(szBuffer, sizeof(szBuffer), read);


puts(szBuffer);



fclose(read);


}

}

}




결과



#c언어입분, #C언어, #fseek, #SEEK_SET, #SEEK_CUR, #SEEK_END, #파일포인터이동



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

주의 사항 : 


사용시 전에 기록된 내용이 모두 지워 집니다.





소스 코드 : main.c

#include <stdio.h>


void main(void)

{

FILE *write = 0, *read = 0;

char szBuffer[256] = { 0, };


fopen_s(&write, "E:\\300\\111\\file.txt", "w+");


if (write == NULL)

{

puts("fail : create file");

}

else

{

printf_s("기록 전 파일 포인터의 위치 : %d\n", ftell(write));

fputs("write text", write);

puts("write text");

printf_s("기록 후 파일 포인터의 위치 : %d\n", ftell(write));

puts(" 파일 위치를 처음 이동");

rewind(write);

printf_s("rewind 호출 후 파일 포인터의 위치 : %d\n", ftell(write));

fputs("call rewind ", write);

fclose(write);



// 파일 읽기 모두로 생성하여  확인

fopen_s(&read, "E:\\300\\111\\file.txt", "r");

if (read == NULL)

{

puts("faild read file");

}

else

{

fgets(szBuffer,sizeof(szBuffer),read);


puts(szBuffer);



fclose(read);


}

}

}





결과



#c언어입문,#c언어배우기,#c언어초보,#파일포인터를처음으로,#rewind

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. 파일 포인터는 현재 읽거나 쓸 위치를 값을 가르키는 것.


2. 파일을 새로 생성하거나 읽기모드로 개방한 경우 파일포인터는 0값


3. 원형 : long ftell(FILE *stream) 




소스코드 : main.c

#include <stdio.h>


void main(void)

{

FILE *write = 0, *read = 0;

char szBuffer[256] = { 0, };


fopen_s(&write, "E:\\300\\110\\file.txt", "w+");


if (write == NULL)

{

puts("fail : create file");

}

else

{

printf_s("기록 전 파일 포인터의 위치 : %d\n",ftell(write));

fputs("write text", write);

puts("write text");

printf_s("기록 후 파일 포인터의 위치 : %d\n", ftell(write));


fclose(write);

}

}




결과



#c언어입문, #c언어기초, #파일포인터구하기, #ftell



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. 파일 버퍼를 일정 크기 만큼 채우지 않고 비운다.


2. 표준 입- 출력 (stdin, stdout) 버퍼를 비운다.


사용 이유 : 


데이터는 파일에 저장되기 전 임시 버퍼에 기록이 됩니다. 갑작스럽게 전원이 차단되면 임시 버퍼의 내용이 기록 되지 않습니다.  하지만 fflush를 호출


하여 버퍼를 즉시 비우고 바로 내용을 기록할 수 있습니다. 예를 들어 메모장에 텍스트를 입력하고 저장하지 않고 강제 종료를 하게 된다면 기록되지 


않는 것과도 같습니다.



소스 코드 :  main.c

#include <stdio.h>


void main(void)

{

FILE *write = 0, *read =  0;

char szBuffer[256] = { 0, };


fopen_s(&write, "E:\\300\\109\\file.txt", "w+" );


if (write == NULL)

{

puts("fail : create file");

}

else

{

fputs("write text \n", write);

puts("success : write file");


puts("call fflush");

fflush(write);// 즉시 "write text" 기록한다.

fclose(write);

fopen_s(&read, "E:\\300\\109\\file.txt", "r");

if (read == 0)

{

puts("fail : read file");

}

else

{

puts("success : read file");

fgets(szBuffer, 256, read);

puts(szBuffer);



fgets(szBuffer, 256, read);

printf("%s", szBuffer);


fclose(read); 

}



}

}



결과  



#c언어입문,#c언어,#파일버퍼비우기,#fflush,#임시저장구현



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
목표 : 

파일을 특정 형식으로 쓰고 읽는다.


소스코드 : main.c
#include <stdio.h>

#define NUMBER_INIT -1

void main(void)
{

FILE *write = 0;
FILE *read = 0;

int write_number = 20170726;
int read_number = NUMBER_INIT;

fopen_s(&write, "E:\\300\\108\\file.txt", "w+");

if (write == NULL)
{
puts("faile : create file");
}
else
{
puts("success : create file");
fprintf_s(write, "%d", write_number);

fclose(write);
}

fopen_s(&read, "E:\\300\\108\\file.txt", "r");

if (read == NULL)
{
puts("fail : read file");
}
else
{
puts("success : read file");
fscanf_s(read, "%d", &read_number);
printf("read number : %d \n", read_number);

fclose(read);
}
}



결과



#파일형식화되게쓰기, #fprintf_s, #fscanf_s


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
목표 : 

파일을 특정 영역에 생성하여 문자열로 기록한 다음 다시 읽어 들여 화면에 표시해보자.


소스 코드 : main.c
#include <stdio.h>

void main(void)
{
FILE *write = 0;
FILE *read = 0;
char szBuffer[256] = { 0, };

fopen_s(&write, "E:\\300\\107\\file.txt", "w+");

if (write == NULL)
{
puts("file 생성을 할수 없습니다.");
}
else
{
puts("file 생성 성공");
puts("--------------");
fputs("create file \n", write);
fclose(write);
}


fopen_s(&read, "E:\\300\\107\\file.txt", "r");

if (read == NULL)
{
puts("file 읽기 실패");
}
else
{

fgets(szBuffer, 256, read); // 256은 버퍼의 최대 크기 입니다.

puts("file에서 읽은 내용입니다.");
puts(szBuffer);
fclose(read);
}

}



결과



#fputs, #fgets, #파일읽고쓰기



+ Recent posts