728x90
반응형
프로그램이 특정 폴더를 계속 계속해서 읽고 그 폴더 안에 파일이 생성 되었을 때 그 파일의 내용을 읽고 그 파일을 복사 이동 삭제하는 기능을 만들어 보았다
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
namespace FolderReader_test
{
public partial class Form1 : Form
{
public string ReadFolder = "읽기 전용 폴더 경로";
public string BackupFolder = "이동 전용 폴더 경로";
private FileSystemWatcher fw;
public Form1()
{
InitializeComponent();
FileWatcher();
}
private void FileWatcher()
{
// 폴더 안에 모든 txt 파일 읽음
fw = new FileSystemWatcher(ReadFolder, "*.txt")
{
NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite // 파일 이름 | 마지막으로 쓰여진 파일 확인 필터 적용
};
fw.Created += FileCreated; // 파일이 생성 되었을때
fw.EnableRaisingEvents = true; // 이벤트 발생
}
// 파일 생성시 처리
private void FileCreated(object sender, FileSystemEventArgs e)
{
// 파일 읽고 dataGridView에 추가
Invoke(new Action(() =>
{
FileContentView(e.FullPath);
MoveFile(e.FullPath);
}));
}
private void FileContentView(string path)
{
try
{
// 파일을 읽고 줄단위 구분
string[] line = File.ReadAllLines(path, Encoding.Default);
foreach (var line2 in line)
{
// 각 줄을 공백으로 분리하여 내용 나눔
string[] part = line2.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (part.Length >= 2)
{
dataGridView1.Rows.Add(part[0], part[1]);
}
// 공백일 경우 N/A 로 표기
//else
//{
// dataGridView1.Rows.Add(part[0], "N/A");
//}
}
}
catch(Exception ex)
{
MessageBox.Show($"파일을 읽는중 에러가 발생했습니다:{ex.Message}");
}
}
private void MoveFile(string path)
{
try
{
string fileName = Path.GetFileName(path);
string destinationPath = Path.Combine(BackupFolder, fileName);
// 파일을 백업 폴더로 이동
File.Copy(path, destinationPath, true);
// 읽기 폴더에 있는 파일 삭제
File.Delete(path);
}
catch (Exception ex)
{
MessageBox.Show($"파일을 이동하는중 에러 발생: {ex.Message}");
}
}
// 폼이 열리면 폴더 읽기
private void Form1_Load(object sender, EventArgs e)
{
// dataGridView 크기 조정
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
//dataGridView 컬럼
dataGridView1.Columns.Add("FileContent", "측정 내용");
dataGridView1.Columns.Add("FileContent", "측정 값");
// FileSystemWatcher 경로
fw.Path = ReadFolder;
}
}
}
우선 전체적인 코드 구조이다
FileSystemWatcher 는System.IO에 속한 클래스로 폴더 내의 파일과 폴더의 변화를 감지 할 수 있다
private void FileWatcher()
{
// 폴더 안에 특정 파일 읽음
fw = new FileSystemWatcher(ReadFolder, "*.txt")
{
NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite // 파일 이름 | 마지막으로 쓰여진 파일 확인 필터 적용
};
fw.Created += FileCreated; // 파일이 생성 되었을때
fw.EnableRaisingEvents = true; // 이벤트 발생
}
우선 FileWatcher 이라는 메서드를 생성 하고 그 안에 폴더의 경로와 특정 파일을 지정하여 파일이 생성 되었을 때 이벤트를 발생 시켰다
<FileCreated>
// 파일 생성시 처리
private void FileCreated(object sender, FileSystemEventArgs e)
{
// 파일 읽고 dataGridView에 추가
Invoke(new Action(() =>
{
FileContentView(e.FullPath); // 파일의 내용을 보여준다
MoveFile(e.FullPath); // 파일을 이동한다
}));
파일이 생성되면 dataGridView에 파일의 내용을 출력해주고 파일을 백업 폴더로 이동 하게 구현하였다
<FileContentView>
private void FileContentView(string path)
{
try
{
string[] line = File.ReadAllLines(path, Encoding.Default);
foreach (var line2 in line)
{
// 각 줄을 공백으로 분리하여 내용 나눔
string[] part = line2.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (part.Length >= 2)
{
dataGridView1.Rows.Add(part[0], part[1]);
}
// 공백일 경우 N/A 로 표기
//else
//{
// dataGridView1.Rows.Add(part[0], "N/A");
//}
}
}
catch(Exception ex)
{
MessageBox.Show($"파일을 읽는중 에러가 발생했습니다:{ex.Message}");
}
}
파일을 읽고 내용을 출력 해주고 각 줄을 공백으로 분리하여 내용을 나누어 주었다 주석의 경우 공백 일 경우 표기 하는 것 이다
<MoveFile>
private void MoveFile(string path)
{
try
{
string fileName = Path.GetFileName(path);
string destinationPath = Path.Combine(BackupFolder, fileName);
// 파일을 백업 폴더로 이동
File.Copy(path, destinationPath, true);
// 읽기 폴더에 있는 파일 삭제
File.Delete(path);
}
catch (Exception ex)
{
MessageBox.Show($"파일을 이동하는중 에러 발생: {ex.Message}");
}
}
<Form1_Load>
// 폼이 열리면 폴더 읽기
private void Form1_Load(object sender, EventArgs e)
{
// dataGridView 크기 조정
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
//dataGridView 컬럼
dataGridView1.Columns.Add("FileContent", "측정 내용");
dataGridView1.Columns.Add("FileContent", "측정 값");
// FileSystemWatcher 경로
fw.Path = ReadFolder;
}
}
}
폼이 열리면 폴더를 계속 읽게 만들었다
dataGridView 의 크기와 컬럼의 행을 만들어주었다
728x90
반응형
'개발일지 > C#' 카테고리의 다른 글
윈폼 예제 (0) | 2024.11.13 |
---|---|
텍스트 형태의 파일 입출력 예제 (0) | 2024.11.12 |
회계 관리 프로그램 예제 (1) | 2024.11.09 |
인사 급여 관리 프로그램 예제 (0) | 2024.11.08 |
C# Delegate (2) | 2024.10.02 |