C#/기타
[C#] 파일 입출력 (FileStream, BinaryReader/Writer, StreamReader/Writer)
스타크래프트 좋아하는 사람
2022. 4. 24. 14:53
1. 바이너리 파일로 저장하고 읽어오는 코드입니다.
여러 타입을 저장할 수 있는데 읽어올 때 반드시 저장된 순서대로 읽어줘야 됩니다.
(문자열은 앞에 문자열의 길이 + 문자열이 저장되어 해당 길이만큼 읽어옵니다.)
using System;
using System.IO; //...Stream
namespace ConsoleApp
{
class Program
{
public static void Main(string[] args)
{
//바이너리 파일 생성 및 저장
FileStream fs = new FileStream("Test.bin", FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
string input1 = Console.ReadLine();
int input2 = Convert.ToInt32(Console.ReadLine());
float input3 = Convert.ToSingle(Console.ReadLine());
bw.Write(input1); //string
bw.Write(input2); //int
bw.Write(input3); //float
bw.Close();
fs.Close();
//바이너리 파일 읽어오기
FileStream fs2 = new FileStream("Test.bin", FileMode.Open);
BinaryReader br = new BinaryReader(fs2);
Console.WriteLine(br.ReadString()); //string
Console.WriteLine(br.ReadInt32()); //int
Console.WriteLine(br.ReadSingle()); //float
br.Close();
fs2.Close();
}
}
}
2. StreamReader/StreamWriter 를 이용한 모습입니다. 문자열 그대로 저장이 됩니다.
using System;
using System.IO; //...Stream
namespace ConsoleApp
{
class Program
{
public static void Main(string[] args)
{
StreamWriter sw = new StreamWriter("Test.dat");
for (int i = 0; i < 5; ++i) //5개의 입력
{
sw.WriteLine(Console.ReadLine());
}
sw.Close();
StreamReader sr = new StreamReader("Test.dat");
while (!sr.EndOfStream) //sr.ReadLine() == null인 경우입니다.
{
Console.WriteLine(sr.ReadLine());
}
sr.Close();
}
}
}
보안적인 측면은 바이너리 코드가 읽기가 어려워지기 때문에 더 좋습니다.
아니면 암호화나 해시를 하는 방법을!