[C#] 파일 정보 출력 및 저장
CODE
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
// Excel 파일을 읽고 쓰는데 필요한 클래스, 메소드등의 인터페이스 사용을 쉽게 한다.
// 네임스페이스의 별칭을 부여해 Excel로 편하게 사용한다.
using Excel = Microsoft.Office.Interop.Excel;
namespace B_FileExcelSave
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/* 인스턴스 객체, 변수를 초기화 하지 않으면 쓰레기 값이 나올 여지가 생김*/
FileInfo fi = null; // 파일 정보 가져오기 (FileInfo : System.IO(입출력) 관련 클래스)
string FsPath = ""; // 파일 경로 저장 (파일 멤버에 변수, 메소드, 속성, 생성자 등 포함)
private void btnPath_Click(object sender, EventArgs e)
{
if(this.ofdFile.ShowDialog() == DialogResult.OK)
{
foreach (string f in this.ofdFile.FileNames)
{
fi = new FileInfo(f);
this.lvFile.Items.Add(new ListViewItem(new string[]
{ fi.Name, fi.LastWriteTime.ToString(), fi.Extension.Split('.')[1],
GetFileSize(fi.Length), fi.FullName }));
}
}
}
private string GetFileSize(double byteCount)
{
string size = "0 Bytes";
if (byteCount >= 1073741824.0)
{
// {0:##.##} : 0 = Index 번호 (byteCount / 1073741824.0) 값 해당, ##.## = 표현 형식 지정
size = String.Format("{0:##.##}", byteCount / 1073741824.0) + " GB";
}
else if (byteCount >= 1048576.0)
{
size = String.Format("{0:##.##}", byteCount / 1048576.0) + " MB";
}
else if (byteCount >= 1024.0)
{
size = String.Format("{0:##.##}", byteCount / 1024.0) + " KB";
}
else if (byteCount > 0 && byteCount < 1024.0)
{
size = byteCount.ToString() + " Bytes";
}
return size;
}
private void btnSave_Click(object sender, EventArgs e)
{
if(this.lvFile.Items.Count == 0)
{
MessageBox.Show("저장할 파일 정보가 없습니다.", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
if (this.rbText.Checked == true)
{
this.sfdFile.Filter = "텍스트 파일(*.txt) | *.txt";
if (this.sfdFile.ShowDialog() == DialogResult.OK)
{
FsPath = this.sfdFile.FileName;
TxtSave();
}
}
else
{
this.sfdFile.Filter = "엑셀 파일(*.xlsx) | *.xlsx";
if (this.sfdFile.ShowDialog() == DialogResult.OK)
{
FsPath = this.sfdFile.FileName;
ExcelSave();
}
}
}
private void TxtSave()
{
// using : 메모리를 할당하는 객체 선언, 안정적으로 메모리 할당 가능 using을 벗어날 경우에도 안정적인 메모리 해제가 가능
using (StreamWriter sw = new StreamWriter(FsPath))
{
sw.WriteLine("이름" + "\t" + "수정한 날짜" + "\t" + "유형" + "\t" + "크기" + "\t" + "경로" + "\t");
for(int n = 0; n < this.lvFile.Items.Count; n++)
{
string FInfo = "";
for(int i = 0; i < this.lvFile.Items[n].SubItems.Count; i++)
{
FInfo += this.lvFile.Items[n].SubItems[i].Text + "\t";
}
sw.WriteLine(FInfo);
}
sw.Close();
}
}
private void ExcelSave()
{
Excel.Application eApp;
Excel.Workbook eWorkbook;
Excel.Worksheet eWorkSheet;
string[,] data;
eApp = new Excel.Application();
eWorkbook = eApp.Workbooks.Add(true);
eWorkSheet = (Excel.Worksheet)eWorkbook.Sheets[1]; // Excel Sheet 배열은 1부터 시작한다.
int rNum = this.lvFile.Items.Count + 1;
int cNum = 5;
data = new string[rNum, cNum];
data[0, 0] = "이름";
data[0, 1] = "수정한 날짜";
data[0, 2] = "유형";
data[0, 3] = "크기";
data[0, 4] = "경로";
for (int n = 0; n < this.lvFile.Items.Count; n++)
{
for(int i = 0; i < this.lvFile.Items[n].SubItems.Count; i++)
{
data[n + 1, i] = this.lvFile.Items[n].SubItems[i].Text;
}
}
string EndStr = "E" + rNum.ToString();
eWorkSheet.get_Range("A1 : " + EndStr).Value2 = data;
eWorkbook.SaveAs(FsPath, Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, false, false, Excel.XlSaveAsAccessMode.xlShared, false, false, Type.Missing, Type.Missing, Type.Missing);
eWorkbook.Close(false, Type.Missing, Type.Missing);
eApp.Quit();
}
}
}
실행 결과
Author And Source
이 문제에 관하여([C#] 파일 정보 출력 및 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyun3220/C-파일-정보-출력저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)