728x90
- 스트림(Stream)
- 파일, 네트워크 등에서 사용
- File & Directory 클래스
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _132_File01
{
class Program
{
static void Main(string[] args)
{
string path = "";
if(args.Length <= 0)
{
path = Directory.GetCurrentDirectory();
path += "\\a.txt";
Console.WriteLine("path : " + path);
}
else
{
path = args[0];
}
if(File.Exists(path))
{
Console.WriteLine("\nGetCreationTime : " + File.GetCreationTime(path));
}
else
{
FileStream fs = File.Create(path);
fs.Close();
}
FileInfo fileInfo = new FileInfo("b.txt");
FileStream ff = fileInfo.Create();
ff.Close();
}
}
}
- System.IO
- 파일과 데이터 스트림에 읽고 쓸 수 있게 하는 형식
- 기본 파일과 디렉토리 지원을 제공하는 형식
- msdn 참조
- 바이트 입출력
- FileStream, BitConverter
- 데이터 형식을 byte 배열로 변환(BitConverter)
- 사용빈도 낮음
- 텍스트 입출력
- StreamWriter, StreamReader
- 사용자 자료 입출력
- [Serializable] 직렬화
- BinaryFormatter, Serialize, Deserialize
- 사용빈도 높음
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace _135_File_BinaryFormatter
{
[Serializable]
struct Player
{
public string _Name;
public int _Level;
public double _Exp;
}
class Program
{
const string fileName = "savePlayer.txt";
static void Main(string[] args)
{
Player[] player = new Player[2];
player[0]._Name = "aaa";
player[0]._Level = 10;
player[0]._Exp = 5400;
player[1]._Name = "bbb";
player[1]._Level = 99;
player[1]._Exp = 53460;
//쓰기
FileStream fsW = new FileStream(fileName, FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fsW, player);
fsW.Close();
//읽기
FileStream fsR = new FileStream(fileName, FileMode.Open);
BinaryFormatter bf2 = new BinaryFormatter();
Player[] readPlayer = (Player[])bf2.Deserialize(fsR);
for(int i = 0; i < readPlayer.Length; i++)
{
Console.WriteLine("Name : " + readPlayer[i]._Name);
Console.WriteLine("Level : " + readPlayer[i]._Level);
Console.WriteLine("Exp : " + readPlayer[i]._Exp);
}
fsR.Close();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace _136_File_Binaryformatter02
{
[Serializable]
struct Player
{
public string _Name;
public int _Level;
public double _Exp;
}
class Program
{
const string fileName = "list.dat";
static void Main(string[] args)
{
List<Player> listPlayers = new List<Player>();
for(int i = 0; i < 10; i++)
{
Player player = new Player();
player._Name = i.ToString();
player._Level = i;
player._Exp = i * 10;
listPlayers.Add(player);
}
//쓰기
FileStream fsw = new FileStream(fileName, FileMode.Create);
BinaryFormatter bfw = new BinaryFormatter();
bfw.Serialize(fsw, listPlayers);
fsw.Close();
//읽기
FileStream fsr = new FileStream(fileName, FileMode.Open);
BinaryFormatter bfr = new BinaryFormatter();
List<Player> readPlayers = (List<Player>)bfr.Deserialize(fsr);
foreach(var data in readPlayers)
{
Console.WriteLine("_Name : {0} _Level : {1} _Exp : {2}", data._Name, data._Level, data._Exp);
}
fsr.Close();
}
}
}
- 이진 입출력
- BinaryWriter, BinaryReader
- 모든 기본 데이터 형식에 읽고 쓰기 오버로딩
- CSV데이터 활용
- 게임 데이터 협업
- String.Split 활용
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _138_File_CSV
{
class Stage
{
public string stage { get; set; }
public int min { get; set; }
public int max { get; set; }
public int finish { get; set; }
public int gold { get; set; }
}
class Program
{
static void Main(string[] args)
{
const string fileName = "test.csv";
int index = 0;
List<Stage> listStage = new List<Stage>();
using(StreamReader sr = new StreamReader(new FileStream(fileName, FileMode.Open)))
{
while(false == sr.EndOfStream)
{
string readStr = sr.ReadLine();
if(index++ >= 1)
{
string[] splitData = readStr.Split(',');
Stage temp = new Stage();
temp.stage = splitData[0];
temp.min = Convert.ToInt32(splitData[1]);
temp.max = Convert.ToInt32(splitData[2]);
temp.finish = Convert.ToInt32(splitData[3]);
temp.gold = Convert.ToInt32(splitData[4]);
listStage.Add(temp);
}
}
}
foreach(var d in listStage)
{
Console.WriteLine("{0} {1} {2} {3} {4}", d.stage, d.min, d.max, d.finish, d.gold);
Console.WriteLine();
}
string str = "0, 1, 2, 3, 4, 5";
string[] splitRead = str.Split(',');
for(int i = 0; i < splitRead.Length; i++)
{
Console.Write("{0}", splitRead[i]);
}
}
}
}
728x90
'게임 프로그래밍 > C#' 카테고리의 다른 글
C# 자료구조 Data Structure (0) | 2021.12.25 |
---|---|
C# 스레드 Thread (0) | 2021.12.24 |
C# LINQ(Select, Oderby, Group, Join) (0) | 2021.12.21 |
C# 람다식 Ramdba (0) | 2021.12.21 |
C# 대리자 delegate & 이벤트 event (0) | 2021.12.21 |