Publish:

C ์Šคํƒ€์ผ ํŒŒ์ผ ์ž…์ถœ๋ ฅ

File Stream์„ ๋งŒ๋“ค์–ด์„œ FILE ํƒ€์ž…์˜ ๋ณ€์ˆ˜์— ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. File Stream์€ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ฝ์–ด์˜ฌ ๋•Œ ํ•ด๋‹น ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ณ€์ˆ˜์ด๋‹ค.

์ ˆ๋Œ€๊ฒฝ๋กœ: ๋ณดํ†ต ํƒ์ƒ‰๊ธฐ์˜ ํด๋” ๊ฒฝ๋กœ. ๋“œ๋ผ์ด๋ธŒ๋ถ€ํ„ฐ์˜ ์ „์ฒด ๊ฒฝ๋กœ. ์ƒ๋Œ€๊ฒฝ๋กœ: ํ˜„์žฌ ํด๋”๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ชฉ์ ์ง€ ๊ฒฝ๋กœ๊นŒ์ง€์˜ ์ƒ๋Œ€์ ์ธ ๊ฒฝ๋กœ.

๋ชจ๋“œ ๋ฌธ์ž์—ด ์˜๋ฏธ ํŒŒ์ผ์ด ์—†์„ ๋•Œ ํŒŒ์ผ์ด ์žˆ์„ ๋•Œ ์ฝ๊ธฐ ์“ฐ๊ธฐ ์ถ”๊ฐ€
r ์ฝ๊ธฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ํŒŒ์ผ์—ด๊ธฐ O X X
w ์“ฐ๊ธฐ ํŒŒ์ผ ์ƒ์„ฑ ๋ฎ์–ด์“ฐ๊ธฐ X O X
a ์ถ”๊ฐ€ ํŒŒ์ผ ์ƒ์„ฑ ๋‚ด์šฉ ์ถ”๊ฐ€ X O O
r+ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์˜ค๋ฅ˜๋ฐœ์ƒ ํŒŒ์ผ ์—ด๊ธฐ O O X
w+ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ƒˆ๋กœ ์ƒ์„ฑ ๋ฎ์–ด์“ฐ๊ธฐ O O X
a+ ์ฝ๊ธฐ/์ถ”๊ฐ€ ์ƒˆ๋กœ์ƒ์„ฑ ์—ด๊ธฐ, ์ถ”๊ฐ€ O O O
rt ํ…์ŠคํŠธ์ฝ๊ธฐ ์˜ค๋ฅ˜๋ฐœ์ƒ ์—ด๊ธฐ O x x

fopen_s, fclose, fputs, fputc, fgets, fgetc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>

int main()
{
    FILE* fileStream = nullptr;

    // 1๋ฒˆ ์ธ์ž์— FileStream์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.
    // 2๋ฒˆ ์ธ์ž๋Š” ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š”๋ฐ, ๋ณดํ†ต ์ƒ๋Œ€๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ,
    // ์ƒ๋Œ€๊ฒฝ๋กœ์˜ ๊ฒฝ์šฐ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ง€์ •ํ•œ๋‹ค.
    // 3๋ฒˆ ์ธ์ž๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ฝ์„ ๋•Œ, ์–ด๋–ค ํŒŒ์ผ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ฝ์„์ง€ ์˜ต์…˜์„ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
    // ์ฒซ๋ฒˆ์งธ : r, w, a
    // ๋‘๋ฒˆ์งธ : t (ํ…์ŠคํŠธํŒŒ์ผ), b (๋ฐ”์ด๋„ˆ๋ฆฌํŒŒ์ผ), + 

    // ํŒŒ์ผ ์“ฐ๊ธฐ

    // ํ…์ŠคํŠธํŒŒ์ผ ์ƒ์„ฑ
    // ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ด์ค‘ํฌ์ธํ„ฐ๋ฅผ ์„ค์ •ํ•˜์—ฌ,
    // ํ•จ์ˆ˜ ๋ฐ”๊นฅ์˜ ๋ณ€์ˆ˜ ์ฃผ์†Œ๋ฅผ ๋ฐ›์•„์™€์„œ ๊ทธ ๋ณ€์ˆ˜์— ๋™์ ํ• ๋‹น ํ•˜๋Š” ์›๋ฆฌ์™€ ๊ฐ™๋‹ค.
    fopen_s(&fileStream, "Test.txt", "wt");

    // ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์ด ์žˆ์„ ๊ฒฝ์šฐ(nullptr์ด ์•„๋‹ˆ๋ผ๋ฉด), ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
    if (fileStream)
    {
        // fputs : ํŒŒ์ผ์— ํ…์ŠคํŠธ๋ฅผ ์ €์žฅํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
        fputs("0xFEFF", fileStream);

        fputs("File Stream !", fileStream);

        fclose(fileStream);
    }



    // ํŒŒ์ผ ์ฝ๊ธฐ

    fopen_s(&fileStream, "Test.txt", "rt");

    if (fileStream)
    {
        char firstText = fgetc(fileStream);

        printf("firstText : %c", firstText);

        char text[256] = {};

        // ๊ฐœํ–‰๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ๊ณณ ๊นŒ์ง€ ์ฝ์–ด์˜จ๋‹ค.
        // ๋งŒ์•ฝ ๊ฐœํ–‰๋ฌธ์ž ์—†์ด ํŒŒ์ผ์˜ ๋์— ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด, ๊ฑฐ๊ธฐ๊นŒ์ง€๋งŒ ์ฝ์–ด์˜ค๊ฒŒ ๋œ๋‹ค.
        fgets(text, 256, fileStream);

        printf("text : %s", text);

        fclose(fileStream);
    }

    return 0;
}

๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ์“ฐ๊ณ  ์ฝ๊ธฐ (๋ฐฐ์—ด, ๊ตฌ์กฐ์ฒด)

fwrite(&number, sizeof(int), 1, fileStream); 1๋ฒˆ ์ธ์ž์˜ ์ฃผ์†Œ๋กœ๋ถ€ํ„ฐ 2๋ฒˆ ์ธ์ž์˜ ํฌ๊ธฐ * 3๋ฒˆ ์ธ์ž์˜ ๊ฐฏ์ˆ˜ ๋งŒํผ์˜ ๋ฐ”์ดํŠธ๋ฅผ
ํŒŒ์ผ์— ๋ณต์‚ฌํ•œ๋‹ค.

fread(&number, sizeof(int), 1, fileStream);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <iostream>

enum class EPlayerJob : unsigned char
{
	None,
	Knight,
	Archer,
	Magicion
};

struct FPlayerInfo
{
	char Name[32] = {};
	EPlayerJob Job = EPlayerJob::Knight;
	int Attack = 0;
	int Defense = 0;
	int Hp = 0;
	int HpMax = 0;
	int Mp = 0;
	int MpMax = 0;
};

int main()
{
	/*
	๋ฐ”์ด๋„ˆ๋ฆฌํŒŒ์ผ: ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ํŒŒ์ผ์— ์˜ฎ๊ฒจ์„œ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
	*/

	FILE* fileStream = nullptr;

	fopen_s(&fileStream, "TestBinary.tbf", "wb");

	if (fileStream)
	{
		int number = 100;

		// 1๋ฒˆ ์ธ์ž์˜ ์ฃผ์†Œ๋กœ๋ถ€ํ„ฐ 2๋ฒˆ ์ธ์ž์˜ ํฌ๊ธฐ * 3๋ฒˆ ์ธ์ž์˜ ๊ฐฏ์ˆ˜ ๋งŒํผ์˜ ๋ฐ”์ดํŠธ๋ฅผ
		// ํŒŒ์ผ์— ๋ณต์‚ฌํ•œ๋‹ค.
		fwrite(&number, sizeof(int), 1, fileStream);


		// ๋ฐฐ์—ด ์ €์žฅ
		int array[10] = {};

		for (int i = 0; i < 10; i++)
		{
			array[i] = i + 1;
		}

		fwrite(array, sizeof(int), 10, fileStream);

		
		// ๊ตฌ์กฐ์ฒด ์ €์žฅ
		FPlayerInfo player;
		strcpy_s(player.Name, "susu");
		player.Attack = 100;
		player.Defense = 50;
		player.Hp = 500;
		player.HpMax = 500;
		player.Mp = 100;
		player.MpMax = 300;

		fwrite(&player, sizeof(FPlayerInfo), 1, fileStream);

		fclose(fileStream);
	}

	fopen_s(&fileStream, "TestBinary.tbf", "rb");

	if (fileStream)
	{
		int number = 0;

		fread(&number, sizeof(int), 1, fileStream);

		printf("number : %d\n", number);

		// ๊ตฌ์กฐ์ฒด ์ฝ์–ด์˜ค๊ธฐ
		FPlayerInfo player;

		fread(&player, sizeof(FPlayerInfo), 1, fileStream);
		

		// ๋ฐฐ์—ด ์ฝ์–ด์˜ค๊ธฐ
		int array[10] = {};

		fread(array, sizeof(int), 10, fileStream);

		for (int i = 0; i < 10; i++)
		{
			printf("array [%d] : %d\n", i, array[i]);
		}

		fclose(fileStream);
	}

	return 0;
}

C++ ์Šคํƒ€์ผ ํŒŒ์ผ ์ž…์ถœ๋ ฅ

ofstream(์“ฐ๊ธฐ), ifstream(์ฝ๊ธฐ),

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <fstream>                      // fstsream ์„ ์ถ”๊ฐ€ํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

int main()
{
    // 2๋ฒˆ ์ธ์ž์— std::ios::binary ์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์ด ๋œ๋‹ค.
    std::ofstream writeFile("Test2.txt", std::ios::binary);

    // ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ์ฒดํฌํ•œ๋‹ค.
    if (writeFile.is_open() == false)
        return 0;

    writeFile << "ํ…์ŠคํŠธ ์ถ”๊ฐ€\n";
    writeFile << "ํ…์ŠคํŠธ ํ•œ ์ค„ ๋” ์ถ”๊ฐ€\n";

    writeFile.close();



    // ์ฝ์–ด์˜ค๊ธฐ
    std::ifstream readFile("Test2.txt");

    if (readFile.is_open() == false)
        return 0;

    char text[256] = {};

    // ๊ฐœํ–‰๋ฌธ์ž ์ „ ๊นŒ์ง€ ํ•œ ์ค„์„ ์ฝ์–ด์˜ค๊ณ , ๊ฐœํ–‰๋ฌธ์ž๋Š” ๋ฏธํฌํ•จ.
    readFile.getline(text, 256);

    // ๋ฌธ์ž๋งŒ ์ฝ์–ด์˜ค๊ณ , ์ŠคํŽ˜์ด์Šค ๋ฐ”, ๊ฐœํ–‰๋ฌธ์ž ๋“ฑ์˜ ์ „ ๊นŒ์ง€๋งŒ ์ฝ์–ด์˜จ๋‹ค.
    //readFile >> text;

    printf("text : %s", text);				// ํ…์ŠคํŠธ ์ถ”๊ฐ€ ์ถœ๋ ฅ

    readFile.getline(text, 256);
    printf("text : %s", text);				// ํ…์ŠคํŠธ ํ•œ ์ค„ ๋” ์ถ”๊ฐ€ ์ถœ๋ ฅ

    return 0;
}

๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์— ๊ตฌ์กฐ์ฒด, ๋ฐฐ์—ด ์ฝ๊ณ  ์“ฐ๊ธฐ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <fstream>

int main()
{
	std::ofstream writeFile("TestBinary2.tbf", std::ios::binary);

	if (writeFile.is_open() == false)
		return 0;

	int number = 100;

	// const char*๋กœ ํ˜•๋ณ€ํ™˜์„ ํ•ด์ค˜์•ผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
	writeFile.write((const char*)&number, sizeof(int));

	int array[10] = {};

	for (int i = 0; i < 10; i++)
	{
		array[i] = i + 1;
	}

	writeFile.write((const char*)array, sizeof(int) * 10);

	writeFile.close();


	// ์ฝ์–ด์˜ค๊ธฐ

	std::ifstream readFile("TestBinary2.tbf", std::ios::binary);

	if (readFile.is_open() == false)
		return 0;

	// ์ œ๋Œ€๋กœ ์ฝ์–ด์˜ค๋Š”์ง€ ๋ณด๋ ค๊ณ  ์ดˆ๊ธฐํ™”
	number = 0;
	for (int i = 0; i < 10; i++)
	{
		array[i] = 0;
	}

	readFile.read((char*)&number, sizeof(int));
    readFile.read((char*)array, sizeof(int) * 10);

    for (int i = 0; i < 10; i++)
    {
        printf("array[%d] : %d\n", i, array[i]);
    }

	readFile.close();
	

	return 0;
}

์ด์Šˆ ๋ฐ ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ๊ธฐ๋กํ•ด๋‘๋Š” ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค. ๋Œ“๊ธ€, ํ”ผ๋“œ๋ฐฑ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ™‚

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ