Shiny Lime Green Star J, [Cํ”„๋กœ๊ทธ๋ž˜๋ฐ] 13์ฃผ์ฐจ. ํŒŒ์ผ

# ์ŠคํŠธ๋ฆผ

์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ๋ฐ”์ดํŠธ(byte)๋“ค์˜ ํ๋ฆ„์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฒ„ํผ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

๊ธฐ๋ณธ์ ์ธ ์ŠคํŠธ๋ฆผ์€ ์ž๋™ ์ƒ์„ฑ๋œ๋‹ค.

ํ‘œ์ค€ ์ŠคํŠธ๋ฆผ
getchar()
putchar()
gets()
puts()
printf()
scanf()

# ์ŠคํŠธ๋ฆผ๊ณผ ํŒŒ์ผ

์ŠคํŠธ๋ฆผ์€ ๊ตฌ์ฒด์ ์œผ๋กœ FILE ๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•˜์—ฌ ๊ตฌํ˜„

FILE์€ stdio.h์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

ํŒŒ์ผ = ์ŠคํŠธ๋ฆผ

 

# ํŒŒ์ผ์ด ํ•„์š”ํ•œ ์ด์œ 

๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๊ฒƒ๋“ค์€ ์ „์›์ด ๊บผ์ง€๋ฉด ์‚ฌ๋ผ์ง„๋‹ค. ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ €์žฅ ์‹œ ์ „์›์ด ๊บผ์ ธ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋œ๋‹ค.


# ํŒŒ์ผ์˜ ๊ฐœ๋…

์ผ๋ จ์˜ ์—ฐ์†๋œ ๋ฐ”์ดํŠธ

๋ชจ๋“  ํŒŒ์ผ ๋ฐ์ดํ„ฐ ใ…ก> ๋ฐ”์ดํŠธ๋กœ ๋ฐ”๋€Œ์–ด ํŒŒ์ผ์— ์ €์žฅ

๋ฐ”์ดํŠธ๋“ค์„ ํ•ด์„ํ•˜๋Š” ๊ฑด ์ „์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ฑ…์ž„

 

# ํ…์ŠคํŠธ ํŒŒ์ผ (TEXT FILE)

์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ…์ŠคํŠธ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํŒŒ์ผ

Ex) C ํ”„๋กœ๊ทธ๋žจ ์†Œ์ŠคํŒŒ์ผ, ๋ฉ”๋ชจ์žฅ ํŒŒ์ผ

์•„์Šคํ‚ค ์ฝ”๋“œ ์ด์šฉ

์—ฐ์†์ ์ธ ๋ผ์ธ๋“ค๋กœ ๊ตฌ์„ฑ

 

# ์ด์ง„ ํŒŒ์ผ (BINARY FILE)

์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์—†๊ณ  ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ

์ด์ง„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ง์ ‘ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํŒŒ์ผ

ํ…์ŠคํŠธ ํŒŒ์ผ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ผ์ธ๋“ค๋กœ ๋ถ„๋ฆฌ X

๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ X

ํŠน์ • ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด์„œ๋งŒ ํŒ๋… ๊ฐ€๋Šฅ

Ex) C ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ํŒŒ์ผ, ์‚ฌ์šด๋“œ ํŒŒ์ผ, ์ด๋ฏธ์ง€ ํŒŒ์ผ

 


 

# ํŒŒ์ผ ์ฒ˜๋ฆฌ์˜ ๊ฐœ์š”

ํŒŒ์ผ ์—ด๊ธฐ ใ…ก> ํŒŒ์ผ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ใ…ก> ํŒŒ์ผ ๋‹ซ๊ธฐ

๋””์Šคํฌ ํŒŒ์ผ์€ FILE ๊ตฌ์กฐ์ฒด ์ด์šฉํ•ด ์ ‘๊ทผ

FILE ๊ตฌ์กฐ์ฒด ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ํŒŒ์ผ ํฌ์ธํ„ฐ(file pointer)๋ผ๊ณ  ํ•จ

 

# ํŒŒ์ผ ์—ด๊ธฐ

๋ชจ๋“œ ์„ค๋ช…
" r " ์ฝ๊ธฐ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์—ด๊ธฐ
" w " ์“ฐ๊ธฐ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์ƒ์„ฑ
" a " ์ถ”๊ฐ€ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์—ด๊ธฐ

 

# ํŒŒ์ผ ์—ด๊ธฐ ์˜ˆ์ œ

· FILE *fp;

· fp = fopen("test.txt", "w");

์‹คํŒจ ์‹œ NULL๋กœ ๋ฐ˜ํ™˜

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

	FILE* fp;
	
	fp = fopen("test.txt", "w");
	if (fp == NULL)
		printf("file open error\n");
	else
		printf("file open success\n");

	fclose(fp);
	return 0;
}


# ํ…์ŠคํŠธ ํŒŒ์ผ ์ฝ๊ณ  ์“ฐ๊ธฐ

 

ํ•œ ๊ธ€์ž์”ฉ ์“ฐ๊ธฐ

· int fputc (int char, FILE* stream);

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

	FILE* fp;

	fp = fopen("alphabet.txt", "w");
	if (fp == NULL) {
	fprintf(stderr, "file open error\n");
	exit(1);
}
	else
		printf("file open success\n");

	char c;
	for (c = 'a'; c <= 'z'; c++)
		fputc(c, fp);

	fclose(fp);
	return 0;
}

 

 


 

ํ•œ ๊ธ€์ž์”ฉ ์ฝ๊ธฐ

· int fgetc(FILE* stream);

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

	FILE* fp;

	fp = fopen("alphabet.txt", "r");
	if (fp == NULL) {
	fprintf(stderr, "file open error\n");
	exit(1);
}
	else
		printf("file open success\n");

	char c;
	while ((c = fgetc(fp)) != EOF)
		putchar(c);

	fclose(fp);
	return 0;
}

 

*fgetc() ๋ฐ˜ํ™˜๊ฐ’์ด != EOF ์ธ์ง€ ๊ผญ ์ฒดํฌ*


 

ํ•œ ์ค„์”ฉ ์“ฐ๊ธฐ

· int fputs (const char* str, FILE* stream);

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
	FILE* fp;
	char str[100];
	fp = fopen("file.txt", "w");
	if (fp == NULL) {
		fprintf(stderr, "ํŒŒ์ผ file.txt๋ฅผ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.\n");
		exit(1);
	}
	do {
		gets(str); // ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ํ•œ ์ค„์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
		fputs(str, fp); // ์ž…๋ ฅ๋ฐ›์€ ํ•œ ์ค„์„ ํŒŒ์ผ์— ์“ด๋‹ค.
	} while (strlen(str) != 0);

	fclose(fp);
	return 0;
}


ํ•œ ์ค„์”ฉ ์ฝ๊ธฐ

· char* fgets (char* str, int num, FILE* stream);

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	FILE* fp;
	char str[100];
	fp = fopen("file.txt", "r");
	if (fp == NULL) {
		fprintf(stderr, "ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.\n");
		exit(1);
	}
	else {
		if (fgets(str, 100, fp) != NULL)
			puts(str);
		fclose(fp);
	}
	return 0;
}

 


# Lab 1 ํ…์ŠคํŠธ ํŒŒ์ผ ๋ณต์‚ฌ ํ”„๋กœ๊ทธ๋žจ

· if ((fp1 = fopen(file1, "r")) == NULL ) 

· if ((fp2 = fopen(file2, "w")) == NULL ) 

· while ((c = fgetc(fp1)) != EOF) 

· fputc(c, fp2); 

· fclose(fp1); 

 


#Lab 2 ์„ฑ์ ์„ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๊ธฐ

 fp = fopen("scores.txt", "w");

 fprintf(fp, "%d %s %f\n", number, name, score);

scores.txt ํŒŒ์ผ์ด ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ณ  ํŒŒ์ผ ์•ˆ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


#Lab 3 ์„ฑ์  ํŒŒ์ผ์„ ์ฝ์–ด์„œ ์„ฑ์  ํ‰๊ท  ๊ตฌํ•˜๊ธฐ

 if ((fp = fopen(“scores.txt", "r")) == NULL )

 while (!feof(fp))

 fscanf(fp, "%d %s %f", &number, name, &score);

 total += score;

 printf("ํ‰๊ท  = %f\n", total/count);

์•„๊นŒ ๋งŒ๋“  scores.txt ๋‚ด์šฉ์„ ์ฝ์–ด ์ถœ๋ ฅ


# ์ด์ง„ ํŒŒ์ผ

  • ํ…์ŠคํŠธ ํŒŒ์ผ : ๋ชจ๋“  ๋ฐ์ดํ„ฐ ใ…ก> ์•„์Šคํ‚ค ์ฝ”๋“œ ๋ณ€ํ™˜ ( 00110001 ใ…ก> ' 1 ' )
  • ์ด์ง„ ํŒŒ์ผ : ๋ฐ์ดํ„ฐ ํ‘œํ˜„ ๋ฐฉ์‹ ๊ทธ๋Œ€๋กœ ์ €์žฅ ( 00110001 )
ํŒŒ์ผ ๋ชจ๋“œ ์„ค๋ช…
" rb " ์ฝ๊ธฐ + ์ด์ง„ ํŒŒ์ผ ๋ชจ๋“œ
" wb " ์“ฐ๊ธฐ + ์ด์ง„ ํŒŒ์ผ ๋ชจ๋“œ
" ab " ์ถ”๊ฐ€ + ์ด์ง„ ํŒŒ์ผ ๋ชจ๋“œ

 

์ด์ง„ ํŒŒ์ผ ์ฝ๊ณ  ์“ฐ๊ธฐ

 

# ํŒŒ์ผ ํฌ์ธํ„ฐ

64๋น„ํŠธ์˜ ๊ฐ’์œผ๋กœ ์ฝ๊ธฐ, ์“ฐ๊ธฐ ๋™์ž‘์ด ํ˜„์žฌ ์–ด๋–ค ์œ„์น˜์—์„œ ์ด๋ฃจ์–ด์ง€๋Š”์ง€ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

  • fseek(fp, 0L, SEEK_SET); // ํŒŒ์ผ์˜ ์ฒ˜์Œ์œผ๋กœ ์ด๋™
  • fseek(fp, 0L, SEEK_END); // ํŒŒ์ผ์˜ ๋์œผ๋กœ ์ด๋™
  • fseek(fp, 100L, SEEK_SET); // ํŒŒ์ผ์˜ ์ฒ˜์Œ์—์„œ 100๋ฐ”์ดํŠธ ์ด๋™
  • fseek(fp, 50L, SEEK_CUR); // ํ˜„์žฌ ์œ„์น˜์—์„œ 50๋ฐ”์ดํŠธ ์ด๋™
  • fseek(fp, -20L, SEEK_END); // ํŒŒ์ผ์˜ ๋์—์„œ 20๋ฐ”์ดํŠธ ์•ž์œผ๋กœ ์ด๋™

 

# ์ž„์˜ ์ ‘๊ทผ ๊ด€๋ จ ํ•จ์ˆ˜

  • void rewind(FILE *fp); // ํŒŒ์ผ ์œ„์น˜ ํ‘œ์‹œ์ž๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
  • long ftell(FILE *fp); // ํŒŒ์ผ ์œ„์น˜ ํ‘œ์‹œ์ž์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜

- ํŒŒ์ผ ์œ„์น˜ ํ‘œ์‹œ์ž๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ํ˜„์žฌ ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ•จ์ˆ˜๋“ค์ด๋‹ค.

 

user-img J
wogml
ํ˜„์žฌ๊ธ€
[Cํ”„๋กœ๊ทธ๋ž˜๋ฐ] 13์ฃผ์ฐจ. ํŒŒ์ผ
ํ•จ๊ป˜ ๋ณด๋ฉด ์ข‹์„ ํฌ์ŠคํŠธ