하아찡
C# FileIO 프로젝트 본문
FileIO 프로젝트에는 파일 생성, 저장, 불러오기 기능을 추가했습니다.
그래서 각종 셋팅데이터, 로드, Key값 등의 사용했습니다.
FncFileIO.cs(전체 코드)
using System.Runtime.Serialization.Formatters.Binary;
namespace FileIO
{
public enum FileTypes
{
Create,
Append,
OpenOrCreate,
CreateNew,
Open,
Truncate
}
public class FncFileIO
{
public string AppPath { get; private set; }
public FncFileIO()
{
AppPath = Environment.CurrentDirectory;
}
/// <summary>
/// 폴더가 없을경우 폴더 생성
/// </summary>
private void DirExists(string AddPath)
{
DirectoryInfo di = new DirectoryInfo($"{AppPath}\\{AddPath}");
if (!di.Exists) { di.Create(); }
}
/// <summary>
/// 읽기전 유무 확인
/// </summary>
/// <param name="AddPath">추가 경로</param>
/// <param name="FileName">파일명 및 확장자</param>
/// <returns></returns>
private void FileExists(string AddPath, string FileName)
{
DirExists(AddPath);
FileInfo fi = new FileInfo(GetFilePath(AddPath,FileName));
if (!fi.Exists)
{
//파일 생성 후 종료 / 안할시 다른 프로세서에서 참조중이라고 오류뜸
var myFile = fi.Create();
myFile.Close();
}
}
/// <summary>
/// 파일읽기
/// </summary>
/// <typeparam name="T">데이터 타입</typeparam>
/// <param name="AddPath">추가 경로</param>
/// <param name="FileName">파일명 및 확장자</param>
/// <returns></returns>
public List<T> FileListRead<T>(string AddPath, string FileName)
{
List<T> values = new List<T>();
FileExists(AddPath, FileName);
return values;
}
public T FileRead<T>(string AddPath, string FileName)
{
T values = default(T);
FileExists(AddPath, FileName);
try
{
using (FileStream fs = new FileStream(GetFilePath(AddPath, FileName), FileMode.Open, FileAccess.Read))
{
if (fs.Length != 0)
{
BinaryFormatter bf = new BinaryFormatter();
values = (T)bf.Deserialize(fs);
}
}
}
catch(Exception ex)
{
}
return values;
}
#region LogFileWrite
/// <summary>
/// 파일쓰기
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="AddPath">추가경로</param>
/// <param name="FileName">파일명</param>
/// <param name="Type"></param>
/// <param name="InputData"></param>
/// <param name="Logs"></param>
public void LogFileWrite(string AddPath, string FileName, bool Append, string InputData, string Logs)
{
FileExists(AddPath, FileName);
if (InputData is not null)
{
using (StreamWriter sw = new StreamWriter(GetFilePath(AddPath, FileName), Append))
{
string LogTime = DateTime.Now.ToString("HH:mm:ss");
sw.WriteLine($"[ {Logs} : {LogTime} ] {InputData}");
}
}
}
public void LogFileWrite<T>(string AddPath, string FileName, bool Append, List<T> InputData, string Logs)
{
FileExists(AddPath, FileName);
if (InputData is not null)
{
using (StreamWriter sw = new StreamWriter(GetFilePath(AddPath, FileName), Append))
{
foreach (T t in InputData)
{
string LogTime = DateTime.Now.ToString("HH:mm:ss");
sw.WriteLine($"[ {Logs} : {LogTime} ] {t}");
}
}
}
}
#endregion LogFileWrite
public void FileWrite<T>(string AddPath, string FileName, T InputData)
{
FileExists(AddPath, FileName);
if (InputData is not null)
{
using (FileStream fs = new FileStream(GetFilePath(AddPath, FileName), FileMode.OpenOrCreate, FileAccess.Write))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, InputData);
}
}
}
private string GetFilePath(string AddPath, string FileName)
{
string path = $"{AppPath}\\{(AddPath == "" ? FileName : AddPath + "\\" + FileName)}";
return path;
}
}
}
생성자
public FncFileIO()
{
AppPath = Environment.CurrentDirectory;
}
저장될 경로를 현재 실행파일 경로를 AppPath값을 넣어 사용함
폴더 및 파일유무 체크
/// <summary>
/// 폴더가 없을경우 폴더 생성
/// </summary>
private void DirExists(string AddPath)
{
DirectoryInfo di = new DirectoryInfo($"{this.AppPath}\\{AddPath}");
if (!di.Exists) { di.Create(); }
}
/// <summary>
/// 읽기전 유무 확인
/// </summary>
/// <param name="AddPath">추가 경로</param>
/// <param name="FileName">파일명 및 확장자</param>
/// <returns></returns>
private void FileExists(string AddPath, string FileName)
{
DirExists(AddPath);
FileInfo fi = new FileInfo(GetFilePath(AddPath,FileName));
if (!fi.Exists)
{
//파일 생성 후 종료 / 안할시 다른 프로세서에서 참조중이라고 오류뜸
var myFile = fi.Create();
myFile.Close();
}
}
DirExists -> 폴더유무체크 없을경우 생성함.
FileExists -> 파일유무 체크 없을경우 생성함.
파일 저장
public void FileWrite<T>(string AddPath, string FileName, T InputData)
{
FileExists(AddPath, FileName);
if (InputData is not null)
{
using (FileStream fs = new FileStream(GetFilePath(AddPath, FileName), FileMode.OpenOrCreate, FileAccess.Write))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, InputData);
}
}
}
저장될 데이터 타입은 제네릭을 사용하여 Serialize(직렬화)를 하여 데이터를 저장함.
데이터를 직렬화해서 저장하기위해 아래와 같이 "[Serializable]"를 붙여줘야 가능함.
[Serializable]
public struct FileIOAccess
{
public string AccessKey;
public string SecretKey;
}
파일 로드
public T FileRead<T>(string AddPath, string FileName)
{
T values = default(T);
FileExists(AddPath, FileName);
try
{
using (FileStream fs = new FileStream(GetFilePath(AddPath, FileName), FileMode.Open, FileAccess.Read))
{
if (fs.Length != 0)
{
BinaryFormatter bf = new BinaryFormatter();
values = (T)bf.Deserialize(fs);
}
}
}
catch(Exception ex)
{
}
return values;
}
저장과 비슷하게 제네릭으로 데이터타입 받아온 후 해당 데이터 타입으로 값을 반환시켜줌.
각종 로그 저장
#region LogFileWrite
/// <summary>
/// 파일쓰기
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="AddPath">추가경로</param>
/// <param name="FileName">파일명</param>
/// <param name="Type"></param>
/// <param name="InputData"></param>
/// <param name="Logs"></param>
public void LogFileWrite(string AddPath, string FileName, bool Append, string InputData, string Logs)
{
FileExists(AddPath, FileName);
if (InputData is not null)
{
using (StreamWriter sw = new StreamWriter(GetFilePath(AddPath, FileName), Append))
{
string LogTime = DateTime.Now.ToString("HH:mm:ss");
sw.WriteLine($"[ {Logs} : {LogTime} ] {InputData}");
}
}
}
public void LogFileWrite<T>(string AddPath, string FileName, bool Append, List<T> InputData, string Logs)
{
FileExists(AddPath, FileName);
if (InputData is not null)
{
using (StreamWriter sw = new StreamWriter(GetFilePath(AddPath, FileName), Append))
{
foreach (T t in InputData)
{
string LogTime = DateTime.Now.ToString("HH:mm:ss");
sw.WriteLine($"[ {Logs} : {LogTime} ] {t}");
}
}
}
}
#endregion LogFileWrite
반응형
'C# > 코인프로그램 - 코드' 카테고리의 다른 글
[C#/WPF] Upbit프로젝트 DialogAccess (0) | 2023.11.27 |
---|---|
[C#/WPF] Upbit프로젝트 Access (0) | 2023.11.27 |
C# Network 프로젝트 (0) | 2023.11.27 |
[C#/WPF] Language 프로젝트 (0) | 2023.11.26 |
[C#/WPF] Prism으로 작업. 현재까지 진행된 상황정리. (0) | 2023.11.26 |