8 장 파일과 디렉토리. FileSystemInfo 클래스 - 주어진 파일과 디렉토리 ( 또는 폴더 ) 에 대한 일반적인 정보를 알아내는데 사용 - FileSystemInfo 클래스의 주요 속성 및 메서드 속성설명 Attributes 현재 FileSystemInfo 의.

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
SQLite 소개 및 안드로이드에서의 사용법
DB Injection과 대응방안 nwkim.
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
14. 위피 게임: 가위바위보 게임 초기에 점수=0 처음 이기면 10 점 그 다음부터 이기면 점수=현재 점수*2 지면
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
아두이노 조도센서 모니터링 PhotoCell.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
2장 닷넷 프레임워크.
C++ Espresso 제1장 기초 사항.
IntArray[0] int length 5 intArray 객체 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
Internet Computing KUT Youn-Hee Han
Chapter 02 JAVA 프로그래밍 시작하기 01 실무에서 사용하는 JAVA 개발 환경 02 JAVA 프로그램 작성
C#에서 데이터베이스 연동 방법.
C# 05장. 메소드와 인자.
실전 프로젝트 2 : 숫자야구 숫자 야구를 구현해보자.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
제7장 제어구조 I – 식과 문장.
8장 자바 입출력.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
이쁜 코드 작성하기 마이에트 레이더즈팀 중원.
명품 JAVA Essential.
명품 Java Programming.
Hadoop 김연왕
이벤트(Event) 처리하기 윈도우 프로그램에서는 이벤트를 통하여 실행 중인 프로그램에게 사용자의 요구사항을 알린다.
Visual C++ Programming Output and File
윤 홍 란 4 장 클래스 작성 윤 홍 란
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
DataScience Lab. 박사과정 김희찬 (월)
12 데이터베이스 사용하기.
주소록 프로그램.
스택(Stack) 김진수
6장 객체-지향 설계 ①.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
Visual Studio 2010 프로젝트 생성하기 PC화면에서 Visual Studio 2010 아이콘을 더블클릭 하거나
3 장 Visual Basic 2010 기본 문법 3.4 제어문 1) 조건문 2) 반복문 3) 기타 제어문
IT CookBook, 자바로 배우는 쉬운 자료구조
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
비주얼 프로그래밍(2분반) 강의노트 2분반 = 월/목.
6장 객체-지향 설계 ①.
DataScience Lab. 박사과정 김희찬 (월)
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
C# 09장. 상속성.
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
제 12장. 사용자 정의형으로서의 클래스 학기 프로그래밍언어및실습 (C++).
윈도우 계산기 윈도우 보조프로그램 4칙연산 외 10여가지 기능 구현 ⑥ 메뉴 ⑤ 메모리 ③ 단항연산 ④ 지우기
[CPA340] Algorithms and Practice Youn-Hee Han
컴퓨터공학실습(I) 3주 인공지능연구실.
JA A V W. 04.
비주얼 프로그래밍 1분반 화/목.
자바 5.0 프로그래밍.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
비주얼 프로그래밍(2분반) 강의노트 2분반 = 월/목.
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
자바 5.0 프로그래밍.
C# 10장. 참조형.
제 11 장 자바빈즈를 이용한 JDBC 프로그래밍 학기 인터넷비즈니스과 강 환수 교수.
C# 09장. 클래스와 객체.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
임베디드 프로그래밍 Lecture #
Presentation transcript:

8 장 파일과 디렉토리

FileSystemInfo 클래스 - 주어진 파일과 디렉토리 ( 또는 폴더 ) 에 대한 일반적인 정보를 알아내는데 사용 - FileSystemInfo 클래스의 주요 속성 및 메서드 속성설명 Attributes 현재 FileSystemInfo 의 FileAttributes CreationTime 현재 FileSystemInfo 개체를 만든 시간 Exists 파일이나 디렉토리가 있는지 여부 Extension 파일의 확장명 부분을 나타내는 문자열 FullName 파일이나 디렉토리의 전체 경로 LastAccessTime 현재 파일이나 디렉토리에 마지막으로 액세스한 시간 LastWrtieTime 현재 파일이나 디렉토리에 마지막으로 쓴 시간 Name 파일의 경우 : 이름 디렉토리의 경우 : 계층에 있는 마지막 디렉토리의 이름 메소드설명 Delete 파일이나 디렉토리를 삭제

DirectoryInfo - 디렉토리 : 관련된 파일을 모아 놓은 물리적인 공간 - DirectoryInfo 클래스를 사용해 디렉토리에 대한 다양한 처리가 가능 - DirectoryInfo 클래스의 주요 속성과 메서드 속성설명 Attributes 현재 FileSystemInfo 의 FileAttributes CreationTime 디렉토리 생성시간 Exists 디렉토리가 있는지 여부 Extension 파일의 확장자 FullName 파일이나 디렉토리의 전체 경로 Name DirectoryInfo 인스턴스의 이름 Parent 지정된 하위 디렉토리의 부모 디렉토리 Root 경로의 루트 메소드설명 Create 디렉토리를 생성 CreateSubDirectory 지정된 경로에서 하나 이상의 하위 디렉토리를 생성 Delete 경로에서 DirectoryInfo 및 해당 내용을 삭제 GetDirectories 현재 디렉토리으 하위 디렉토리를 반환 GetFiles 현재 디렉토리에서 파일 목록을 반환 GetFileSystemInfos FileSystemInfo 개체 배열 MoveTo DirectoryInfo 인스턴스 및 해당 내용을 새 경로로 이동 ToString 사용자가 통과한 원래의 경로를 반환

- 예 ) Internet Explorer 디렉토리의 정보를 출력하는 프로그램 class Program { public static void Main() { DirectoryInfo dinfo = new Files\Internet Explorer"); if(dinfo.Exists){ Console.WriteLine(" 전체 경로 : {0}", dinfo.FullName); Console.WriteLine(" 디렉토리이름 : {0}", dinfo.Name); Console.WriteLine(" 생성일 : {0}", dinfo.CreationTime); Console.WriteLine(" 디렉토리속성 : {0}", dinfo.Attributes); Console.WriteLine(" 루트 경로 : {0}", dinfo.Root); Console.WriteLine(" 부모 디렉토리 : {0}", dinfo.Parent); }

FileInfo - 새로운 파일을 만들거나 삭제 및 파일에 대한 정보를 구할 때 사용 - FileInfo 클래스의 주요 메서드 메소드설명 AppendText FileInfo 의 인스턴스가 나타내는 파일에 텍스트를 추가하는 StreamWriter 를 생성 CopyTo 새 파일에 기존 파일을 복사 Create 파일을 생성 CreateText 새 텍스트 파일을 쓰는 StreamWriter 를 생성 Delete 파일을 영구적으로 삭제 MoveTo 지정된 파일을 새 위치로 이동하고 새 파일의 이름을 지정할 수 있는 옵션을 제공 Open 다양한 읽기 / 쓰기 및 공유 권한으로 파일을 개설 OpenRead 읽기 전용으로 FileStream 을 생성 OpenText UTF8 인코딩 방식으로 기존 텍스트 파일에서 읽는 StreamReader 를 생성 OpenWrite 쓰기 전용으로 FileStream 을 생성 ToString 정규화된 경로를 문자열로 반환 속성설명 Length 현재 파일의 크기를 구함

- 예 ) 파일의 정보를 구하여 출력하는 프로그램 class Program { public static void Main() { FileInfo finfo = new if(finfo.Exists) { Console.WriteLine(" 폴더이름 : {0}", finfo.Directory); Console.WriteLine(" 파일이름 : {0}", finfo.Name); Console.WriteLine(" 확장자 : {0}", finfo.Extension); Console.WriteLine(" 생성일 : {0}", finfo.CreationTime); Console.WriteLine(" 파일크기 : {0}", finfo.Length); Console.WriteLine(" 파일속성 : {0}", finfo.Attributes); } else Console.WriteLine(" 파일이 존재하지 않습니다."); }

- 예 ) 임의의 디렉토리의 모든 하위 디렉토리와 파일 정보를 출력 class Program { public static void Main() { DirectoryInfo dinfo = new if( dinfo.Exists ) { // 하위 디렉토리 구함 DirectoryInfo [] dir = dinfo.GetDirectories(); foreach( DirectoryInfo d in dir ) { FileInfo [] files = d.GetFiles();// 디렉토리에 있는 파일 구함 Console.WriteLine(" 디렉토리 : {0}, 포함된 파일 수 : {1}", d.FullName, files.Length ); int index = 0; foreach( FileInfo f in files ) { // 파일 정보 구함 string str = String.Format("[{0}] : Name: {1}, Ext: {2}, Size: {3}",++index, f.Name, f.Extension, f.Length ); Console.WriteLine(str); }

Directory 클래스 / File 클래스 - DirectoryInfo 와 FileInfo 클래스와 비슷한 기능을 하는 클래스 - 정적 메서드로만 이루어져 있어서 객체를 생성하지 않아도 사용 가능 - 예 ) //File 클래스를 이용할 // 정적 메서드 사용 //FileInfo 클래스를 이용할 경우 FileInfo fi = new // 객체를 생성

- 예 ) 복사 프로그램 작성하기 (using System.IO 필요 ) class Program { static void Main( String[] args ) { if( args.Length < 2 ) { Console.WriteLine(" 사용법 : FileEx4.exe [ 복사할 파일 ] [ 복사될 경로 ]"); return; } // 명령행 인수로 준 파일의 정보를 구함 FileInfo s_file = new FileInfo( args[0] ); string dest_filename = args[1] + s_file.Name; // 복사될 파일 경로 명 if( s_file.Exists ) { Console.WriteLine("{0} 파일을 {1} 로 복사합니다....", s_file.Name, args[1]); FileInfo c_file = s_file.CopyTo( dest_filename, true );// 파일 복사 if( c_file.Exists ) { Console.WriteLine(" 파일을 성공적으로 복사했습니다.!"); } Console.WriteLine(" 복사된 파일을 삭제하려면 Y 키를 입력하세요 >> "); string input = Console.ReadLine().Trim(); if( input[0] == 'Y' ) { FileInfo m_file = new FileInfo(dest_filename); m_file.Delete(); // 파일 삭제 Console.WriteLine("{0} 파일을 삭제했습니다.", m_file.Name); } - 명령행 인수를 지정하려면 [ 프로젝트 ]->[ 속성 ]->[ 디버그 ]->[ 명령줄 인수 ] 에 프로그램 실 행에 필요한 명령행 인수를 지정 예 ) C:\test.txt C:\

File 클래스 - 파일에 관련된 정보를 제공하거나 FileStream 의 객체를 생성하여 파일의 I/O 작업을 수행 - 정적 메서드로만 이루어져 있어서 객체를 생성하지 않아도 사용 가능 - 주요 메소드 메소드설명 AppendText 기존 파일에 UTF-8 로 인코딩된 텍스트를 추가하는 StreamWriter 를 생성 Copy 새 파일에 기존 파일을 복사 Create 지정된 경로에 파일을 생성 Delete 지정된 파일을 삭제 GetAttributes 경로에 있는 파일의 FileAttributes Move 지정된 파일을 새 위치로 이동하고 새 파일의 이름을 지정할 수 있는 옵션을 제공 Open 다양한 읽기 / 쓰기 및 공유 권한으로 파일을 개설 OpenRead 읽기 전용으로 기존 파일을 개설 OpenText UTF8 인코딩 방식으로 기존 텍스트 파일에서 읽는 StreamReader 를 생성 OpenWrite 쓰기 전용으로 FileStream 을 생성 ToString 정규화된 경로를 문자열로 반환

public class Program { public static void Main() { Console.WriteLine("1. 프로그램 시작 "); Console.WriteLine("2. === Copied Successfully!!==="); bool exist = Console.WriteLine("3. Output.txt 존재여부 :" + exist); DateTime dt = C:\Output.txt "); Console.WriteLine("4. 파일 생성시간 :"+ dt.ToString()); Console.WriteLine("5. 프로그램 끝 "); } - 예 ) File 클래스 사용해보기

- 예 ) 메모장 프로그램 만들기 컨트롤속성값 MenuStrip 파일 MenuItemNamemenuNew Text 새로만들기 MenuItemNamemenuOpen Text 열기 MenuItemNamemenuSave Text 저장 MenuItemNamemenuExit Text 끝내기 편집 MenuItemNamemenuCopy Text 복사하기 MenuItemNamemenuPaste Text 붙여넣기 RichTextBox NametxtMemo AnchorTop, Bottom, Left, Right

- 변수 선언하기 // 현재 텍스트 박스에 출력될 내용을 저장하고 있는 디폴트 파일 이름 string fName = "noname.txt"; // 파일을 저장할 때 현재 텍스트 박스 내용의 변경 유무를 저장 bool modifyFlag = false; - 파일과 편집메뉴 항목들에 Click 이벤트 처리기를 추가 - RichTextBox 컨트롤에 TextChanged 이벤트 처리기를 추가 private void menuOpen_Click(object sender, EventArgs e) { // 현 작업 내용을 저장하지 않았다면 저장 후 파일 열기 대화상자 수행 if( modifyFlag == true ) { DialogResult answer = MessageBox.Show(" 변경된 내용을 저장하겠습니까 ?", " 저장 “, MessageBoxButtons.YesNo); if( answer == DialogResult.Yes ) { // 변경 내용 저장 if( fName == "noname.txt" ) { // 전에 기록된 적이 없는 파일인가 ? // 저장할 파일 이름 지정 if( saveFileDialog1.ShowDialog() == DialogResult.OK ) { // 파일을 생성 StreamWriter fs1 = File.CreateText(saveFileDialog1.FileName); fs1.WriteLine(txtMemo.Text); // 파일에 저장 fs1.Close(); }

else { // 디폴트가 아닌 파일명이 이미 지정된 경우 StreamWriter fs = File.CreateText(fName); fs.WriteLine(txtMemo.Text); fs.Close(); } // 열기 대화상자에서 선택한 파일을 RichTexdtBox 에 출력 openFileDialog1.ShowDialog(); // 파일 열기 대화상자 fName = openFileDialog1.FileName; // 읽기 파일 이름 StreamReader fs = File.OpenText(fName); // 파일 열기 txtMemo.Text = fs.ReadToEnd(); // 파일 끝까지 읽기 modifyFlag = false; // 변경 사항 없음 fs.Close(); } private void menuSave_Click(object sender, EventArgs e) { if( fName == "noname.txt" ){ // 전에 기록된 적이 없는 파일인가 ? saveFileDialog1.ShowDialog(); // 파일 저장 대화상자 fName = saveFileDialog1.FileName;// 저장 파일 이름 } // UTF-8 로 인코딩된 텍스트를 쓰기 위해 파일을 만들거나 엽니다. StreamWriter fs = File.CreateText(fName); fs.WriteLine(txtMemo.Text); // 텍스트박스의 내용 파일에 쓰기 modifyFlag = false; fs.Close(); }

private void menuNew_Click(object sender, EventArgs e) { if( modifyFlag == true ) { // 현 작업 내용을 저장하지 않았다면 DialogResult answer = MessageBox.Show(" 변경된 내용을 저장하겠습니까 ?", " 저장 “, MessageBoxButtons.YesNo); if( answer == DialogResult.Yes ) { // 변경 내용 저장 if( fName == "noname.txt" ) { // 전에 기록된 적이 없는 파일인가 ? if( saveFileDialog1.ShowDialog() == DialogResult.OK ){ StreamWriter fs = File.CreateText(saveFileDialog1.FileName); fs.WriteLine(txtMemo.Text); fs.Close(); } else { StreamWriter fs = File.CreateText(fName); fs.WriteLine(txtMemo.Text); fs.Close(); } // 새로 편집할 파일 생성 txtMemo.Text=""; // 텍스트박스 clear modifyFlag = false; fName = "noname.txt"; }

private void menuExit_Click(object sender, EventArgs e) { if(modifyFlag == true) { // 현 작업 내용을 저장하지 않았다면 DialogResult answer = MessageBox.Show(" 변경된 내용을 저장하겠습니까 ?", " 저장 ", MessageBoxButtons.YesNo); if(answer == DialogResult.Yes) { if(fName == "noname.txt") { if(DialogResult.OK == saveFileDialog1.ShowDialog()) { StreamWriter fs = File.CreateText(saveFileDialog1.FileName); fs.WriteLine(txtMemo.Text); fs.Close(); } else { StreamWriter fs = File.CreateText(fName); fs.WriteLine(txtMemo.Text); fs.Close(); } Close(); }

private void menuCopy_Click(object sender, EventArgs e) { try { // 컨테이너에 있는 활성 컨트롤을 가져옵니다. RichTextBox contents = (RichTextBox)ActiveControl; if(contents != null) { // 시스템 클립보드에 데이터를 배치 Clipboard.SetDataObject(contents.SelectedText); } } catch { // 클립보드에 저장할 수 없을 때 예외 발생 MessageBox.Show(" 에러 발생 "); } // txtMemo.Copy(); } // RichTextBox 의 내용이 변경되었으면 새로 만들기나 열기를 수행시 // 현재 작업된 내용을 파일에 반영하도록 // modifyFlag 를 true 로 설정 private void txtMemo_TextChanged(object sender, EventArgs e) { modifyFlag = true; }

// 붙여넣기는 클립보드에 저장된 내용을 얻어와서 텍스트 박스에 삽입 private void menuPaste_Click(object sender, EventArgs e) { try { RichTextBox contents = (RichTextBox)ActiveControl; // 활성 컨트롤 if(contents != null) { // 현재 시스템 클립보드에 있는 데이터를 검색 IDataObject data = Clipboard.GetDataObject(); if(data.GetDataPresent(DataFormats.Text)) { // 이 인스턴스에 저장된 데이터가 지정된 형식과 관련되어 있거나 // 해당 형식으로 변환될 수 있는지 여부를 확인하고 결과를 display contents.SelectedText = data.GetData(DataFormats.Text).ToString(); modifyFlag = true; } } catch { MessageBox.Show(" 에러 발생 "); }