허당 레몬도리
Published 2009. 5. 12. 21:40
파일제어 관련자료 가. 언어유형/C#
파일제어 관련자료

************************
이벤트로 파일이 없으면 복사
************************

'-------------------------------
If Dir(경로명) = "" Then
MsgBox "파일이 존재하지 않습니다!"
Else
파일 복사...
End If
'-------------------------------

**********
그냥 진행해
**********

'--------------------
on Error Resume Next
'--------------------
**********************
자신의 파일 이름 알아내기
**********************

'-------------------------------------------------------
Shell App.Path + ".\" + App.EXEName + ".exe", vbNormalFocus
'-------------------------------------------------------

********
파일 복사
********

'-------------------------
filecopy "대상파일", "복사될 경로"
'EX) FileCopy "c:\text.txt", "c:\windows\temp\text.txt"
'-------------------------

********
현제경로
********

'-------------------------
App.Path & "파일 이름"
'EX) me.caption = App.Path & "\예제.exe"
'-------------------------

*****************
'CLOSE [파일핸들]
*****************
'현재 열려 있는 파일을 닫는데 사용됩니다. 프로그램이 종료시 파일을 닫지 않으면, 에러가 
'발생할 수도 있으므로 반드시 열어놓은 파일은 프로그램이 종료될때 닫도록 해야합니다.

<Ex>
'------------------------------
Open "newfile.txt" For Input as #1
:
CLOSE #1
'------------------------------

'[!] 닫을때는 반드시 파일 핸들과 같은 파일이 Open되어 있는지 확인하고.. 정확한 파일을
'닫도록 합니다. 잘못닫으면, 어떤 일이 발생하는진 아시죠..

***************
EOF([파일핸들])
***************
파일의 끝을 반환하는 역할을 하는 함수 입니다. End Of File의 약자입니다.
이는 파일에서 데이터를 읽어올때, 파일의 마지막 경계를 넘어가는것을 방지 하기 위해..
사용하는 함수 입니다. 
<Example>
이 소스는 "a.txt"라는 텍스트 파일의 내용을 "b.txt"로 옮기는..
텍스트 파일을 복사하는 효과를 가져옵니다. 물론 텍스트 파일에만 적용됩니다.

'---------------------------------------------------------------------------
Dim Count as Long
Dim Buff as String
Open "a.txt" For Input as #1
Open "b.txt" For Output as #2
Do Until EOF(1)
Input #1, Buff
Print #2, Buff
Count = Count +1 '이 카운터는 필요없으나.. 몇줄을 복사했는지 체크합니다.
Loop
Close #1, #2 
Text1.text =  Count & " Lines, copy" '몇줄이 복사되어 옮겨졌는지 화면에 출력합니다.
'----------------------------------------------------------------------------

[!] 이를 바이너리 모드로 설정하고 읽기와 쓰기 부분을 Get, Put로 바꾸시고.. 몇몇
부분을 추가하면 형식에 구애 받지 않고 모두 복사하는 그러한 복사 프로그램을 
만들 수도 있습니다.
*********
FREEFILE
*********
파일제어시 사용되지 않은 파일번호(파일핸들)을 반환해준다.
즉 프로그래머가 일일이 정확한 파일 핸들을 몰라도 되는경우 이 방법으로 핸들을 
할당하여 플밍하며, 굳지 아직 할당되지 않은 파일번호를 찾지 않아도 되기때문에
파일 오픈시에 주로 동반 사용된다.
<Example>

'--------------------------------------
Dim FreefileNum as Integer
FreefileNum = FreeFile
Open "a.txt" For Input as FreefileNum
:
Close FreefileNum
'--------------------------------------

[!] 파일제어시 파일 핸들에 붙는 '#'은 붙이지 않아도 된다. 정석은 붙이는 거지만...
나를 포함에 다수의 사람들은 대부분 사용하지 않는다. Get, Put에서도 사용하지
않아도 처리되므로 크게 신경쓸거 없다.
***************************
INPUT #[파일핸들], [사용변수]
***************************

기본적으로 콘솔(키보드)로부터 입력을 받는 명령어지만.
여기서 설명할 것은 파일 입출력시 사용되는 기능이다.
또한 이는 텍스트모드 파일에서만 사용되어질 수 있다
<Example>

'------------------------------------------------------------------
Dim Buff as String
Open "a.txt" For Input as #1 '특별한 경우가 아니면 직접 파일 핸들을 지정한다.
Input #1, , Buff  '파일로 부터 한줄을 Buff변수로 읽어 온다.
Close #1
'------------------------------------------------------------------

[!] 파일 모드 부분에도 Input가 사용되지만 저것은 Open에서 사용하는 파일 모드 지정자이다.
**************
KILL [파일이름]
**************

이는 파일을 제거 할때 사용하면 명령어로.. 일반적으로 그냥 파일지우기 할때 사용합니다.
<Example>

'-----------------------------------------------------------------------
Kill "c:\aaa\*.txt" '루트밑의 aaa 라는 폴더에서 확장자가 txt인 파일을 모두 지운다
Kill "c:\aaa\?aa.txt" '루트밑의 aaa 라는 폴더에서 이름이 3자, 확장가 txt이면서 
'이름중 두번째 세번째 철자가 aa 인 파일을 전부 지운다
Kill "a.txt" '현재 폴더의 a.txt 파일을 지운다
Kill "*.*" '현재 폴더의 모든 파일을 지운다.
'-----------------------------------------------------------------------

[!] 파일을 현재 열어서 제어중이거나, 존재하지 않을시 런타임 에러가 나니, 필히
특정 파일을 지울땐 존재유무나 열림 유무를 확인 하여야 한다.
이를 막기 위해선 에러 트랩핑을 해주어야 한다.

***************
LOF([파일핸들])
***************
현재 Open으로 열린 파일의 크기를 되돌린다. 

<Example>
'--------------------------
Open "a.exe" For Binary as #1
Text1.text = Cstr(Lof(1))
'--------------------------
[!] 반드시 Open으로 열어놓은 후에 사용하셔야 합니다.

***************
LOC([파일핸들])
***************
파일내의 현재 위치를 반환한다.
텍스트 파일인경우 현재의 바이트(위치)를 18로 나누어 반환한다.
렌덤모드 파일은 마지막으로 읽거나 작성된 레코드 번호를 반환한다.
바이너리모드 파일은 현재 위치(바이트)를 반환한다.
<Example>
'--------------------------
Open "a.dat" For Binary as #1
Text1.text = Cstr(Loc(1))
Close #1
'--------------------------
**********************
MKDIR [경로 및 폴더이름]
**********************
새 폴더를 만든다

<Example>

'--------------------------------------------
Mkdir "c:\aaa" '루트 밑에 aaa라는 폴더를 생성한다 
'--------------------------------------------

******************************
NAME [변경대상이름] AS [새이름]
******************************
파일 또는 폴더의 이름을 변경한다.

<Example>
'---------------------------------------------------------------------------
Name "C:\aaa" as "C:\aaa1" '폴더의 이름을 변경합니다.
Name "a.txt" as "a1.txt" '파일의 이름을 변경합니다.
Name "C:\aaa\file.txt" as "C:\bbb\file.txt" '이동합니다, MOVE와 같은 작업을 합니다.
'---------------------------------------------------------------------------
[!] 맨 마지막것을 이용하면 MDIR의 Move기능도 구현할 수 있습니다. 

****************************************
OPEN [파일이름] FOR [모드] AS #[파일핸들]
****************************************

파일을 제어 하기 위해 파일을 여는일을 한다. 파일제어에 가장 처음 할것이다.

<Example>

'---------------------------------------------------------
Open "a.txt" For Input as #1  ' 텍스트모드 읽기로 연다
Open "a.txt" For Output as #2  '텍스트모드 쓰기로 연다
Open "a.txt" For Append as #3  '텍스트모드 추가로 연다
Open "a.dat" For Random as #4  '랜덤모드로 읽기/쓰기로 연다
Open "a.exe" For Binary as #5  '바이너리모드로 읽기/쓰기로 연다
'---------------------------------------------------------

[!] Output모드는 같은 이름의 파일이 존재 할때 제거하고 덮어쓰기로 파일을 연다..
Append모드는 같은 이름의 파일이 있을때 주로 사용하는데.. 계속 이어서 작업할때
사용하는 모드이다.  텍스트 모드에서만 기능이 구분되고 나머지는 공용으로 연다.

***************************************
PUT #[파일핸들], [기록할 위치], [버퍼변수]
***************************************
;이것 또한 GET와 함께 그래픽 명령어로도 사용되었지만.. 비베에선 파일 입출력
시에나 쓰게되는 명령어가 되었다.  원하는 위치에서 데이터를 기록한다

<Example>
'파일의 처음부분에 "AAAAA"를 기록한다.
'위치를 생략하면, 처음또는 이전에 작업하던위치 바로 뒤에 기록한다.

'-----------------------------------------------
Open "a.exe" for Binary as #1
PUT #1, , "AAAAA"  '파일 처음에 기록한다.
PUT #1, , "BBBBB"    ' "AAAAA"의 바로뒤에 기록된다.
'-----------------------------------------------

[!] 특정부분의 위치를 지정할경우 해당 위치에 기록하며, 위처럼 생략하면,
파일을 열자마자 했을경우엔 파일처음, 파일을 열고 동일 파일에 제어한적이
있을경우 바로 그 뒤에 기록한다. 
이 위치는 기본적으론 바이트 단위로 이동이 되며, 비베의 경우 유니코드 때문에..
한글의 경우 한글한글자를 1바이트에 상응하는 크기로 처리하여 한번에 2바이트씩 제어가 된다.

**********************
RMDIR [경로 및 폴더이름]
**********************
지정된 폴더를 지웁니다. 
도스에서는 행당폴더 내에 파일이 존재 하지 않아야 하는데.. 비베에서도 아마..

<Example>
'--------------
RMDIR "c:\aaa"
'--------------
*****************************************
SEEK #[파일핸들], [새 위치] 또는 ([파일핸들])
*****************************************

파일내의 포인터를 원하는 위치로 이동 또는 현재 작업위치를 반환한다.

<Example>
'---------------------------------------------
SEEK #1, 10 '포인터를 10바이트 위치로 이동한다.
Text1.text = SEEK(1) '현재 포인터의 위치를 반환한다.
'---------------------------------------------
[!] 이동은 주로 텍스트모드에서, 위치읽기는 바이너리, 랜덤, 텍스트 모두 사용되어진다.
물론 해당 파일을 OPEN으로 연후에 사용하여야 한다. OPEN을 제외한 모든..
파일제어문은 OPEN으로 파일을 열어놓은 상태에서 그 해당 파일의 핸들을 가지고 
제어하게 됩니다. 꼭 알아두세여..
****************************
WRITE#[파일핸들], [데이터]
****************************
주로 파일에 저장할때 사용되는데, 있는그대로 저장한다.

<Example>
'파일이 열렸다고 가정 (텍스트모드로..)

'-----------------
WRITE #1, "AAAAA"
'-----------------

'파일에 AAAAA라고 기록되지 않고 "AAAAA" 로 따옴표까지 저장된다.

[!] 텍스트 모드에서 Input으로 항목형식으로 읽을 수 있도록 할 수 있다.


Jimmy님의 강좌에서 배긴거나
http://VBBank.co.kr Q/A 를 보고
자주 올라오는 질문을 한번 이렇게 맹글어 보았습니다.
다음에 추가 할 사항이 있으면 다시 더 많이 추가 하겠습니다.
이상 항상 노력하는 따식이 였습니다.

'강좌 하는 사람 : 따식이
'강좌는 제목 : 파일에 관하여.. - 자주 올라오는 질문
'필요한건 배낀것도 있음..

************************
이벤트로 파일이 없으면 복사
************************

'-------------------------------
If Dir(경로명) = "" Then
MsgBox "파일이 존재하지 않습니다!"
Else
파일 복사...
End If
'-------------------------------

**********
그냥 진행해
**********

'--------------------
on Error Resume Next
'--------------------
**********************
자신의 파일 이름 알아내기
**********************

'-------------------------------------------------------
Shell App.Path + ".\" + App.EXEName + ".exe", vbNormalFocus
'-------------------------------------------------------

********
파일 복사
********

'-------------------------
filecopy "대상파일", "복사될 경로"
'EX) FileCopy "c:\text.txt", "c:\windows\temp\text.txt"
'-------------------------

********
현제경로
********

'-------------------------
App.Path & "파일 이름"
'EX) me.caption = App.Path & "\예제.exe"
'-------------------------

*****************
'CLOSE [파일핸들]
*****************
'현재 열려 있는 파일을 닫는데 사용됩니다. 프로그램이 종료시 파일을 닫지 않으면, 에러가 
'발생할 수도 있으므로 반드시 열어놓은 파일은 프로그램이 종료될때 닫도록 해야합니다.

<Ex>
'------------------------------
Open "newfile.txt" For Input as #1
:
CLOSE #1
'------------------------------

'[!] 닫을때는 반드시 파일 핸들과 같은 파일이 Open되어 있는지 확인하고.. 정확한 파일을
'닫도록 합니다. 잘못닫으면, 어떤 일이 발생하는진 아시죠..

***************
EOF([파일핸들])
***************
파일의 끝을 반환하는 역할을 하는 함수 입니다. End Of File의 약자입니다.
이는 파일에서 데이터를 읽어올때, 파일의 마지막 경계를 넘어가는것을 방지 하기 위해..
사용하는 함수 입니다. 
<Example>
이 소스는 "a.txt"라는 텍스트 파일의 내용을 "b.txt"로 옮기는..
텍스트 파일을 복사하는 효과를 가져옵니다. 물론 텍스트 파일에만 적용됩니다.

'---------------------------------------------------------------------------
Dim Count as Long
Dim Buff as String
Open "a.txt" For Input as #1
Open "b.txt" For Output as #2
Do Until EOF(1)
Input #1, Buff
Print #2, Buff
Count = Count +1 '이 카운터는 필요없으나.. 몇줄을 복사했는지 체크합니다.
Loop
Close #1, #2 
Text1.text =  Count & " Lines, copy" '몇줄이 복사되어 옮겨졌는지 화면에 출력합니다.
'----------------------------------------------------------------------------

[!] 이를 바이너리 모드로 설정하고 읽기와 쓰기 부분을 Get, Put로 바꾸시고.. 몇몇
부분을 추가하면 형식에 구애 받지 않고 모두 복사하는 그러한 복사 프로그램을 
만들 수도 있습니다.
*********
FREEFILE
*********
파일제어시 사용되지 않은 파일번호(파일핸들)을 반환해준다.
즉 프로그래머가 일일이 정확한 파일 핸들을 몰라도 되는경우 이 방법으로 핸들을 
할당하여 플밍하며, 굳지 아직 할당되지 않은 파일번호를 찾지 않아도 되기때문에
파일 오픈시에 주로 동반 사용된다.
<Example>

'--------------------------------------
Dim FreefileNum as Integer
FreefileNum = FreeFile
Open "a.txt" For Input as FreefileNum
:
Close FreefileNum
'--------------------------------------

[!] 파일제어시 파일 핸들에 붙는 '#'은 붙이지 않아도 된다. 정석은 붙이는 거지만...
나를 포함에 다수의 사람들은 대부분 사용하지 않는다. Get, Put에서도 사용하지
않아도 처리되므로 크게 신경쓸거 없다.
***************************
INPUT #[파일핸들], [사용변수]
***************************

기본적으로 콘솔(키보드)로부터 입력을 받는 명령어지만.
여기서 설명할 것은 파일 입출력시 사용되는 기능이다.
또한 이는 텍스트모드 파일에서만 사용되어질 수 있다
<Example>

'------------------------------------------------------------------
Dim Buff as String
Open "a.txt" For Input as #1 '특별한 경우가 아니면 직접 파일 핸들을 지정한다.
Input #1, , Buff  '파일로 부터 한줄을 Buff변수로 읽어 온다.
Close #1
'------------------------------------------------------------------

[!] 파일 모드 부분에도 Input가 사용되지만 저것은 Open에서 사용하는 파일 모드 지정자이다.
**************
KILL [파일이름]
**************

이는 파일을 제거 할때 사용하면 명령어로.. 일반적으로 그냥 파일지우기 할때 사용합니다.
<Example>

'-----------------------------------------------------------------------
Kill "c:\aaa\*.txt" '루트밑의 aaa 라는 폴더에서 확장자가 txt인 파일을 모두 지운다
Kill "c:\aaa\?aa.txt" '루트밑의 aaa 라는 폴더에서 이름이 3자, 확장가 txt이면서 
'이름중 두번째 세번째 철자가 aa 인 파일을 전부 지운다
Kill "a.txt" '현재 폴더의 a.txt 파일을 지운다
Kill "*.*" '현재 폴더의 모든 파일을 지운다.
'-----------------------------------------------------------------------

[!] 파일을 현재 열어서 제어중이거나, 존재하지 않을시 런타임 에러가 나니, 필히
특정 파일을 지울땐 존재유무나 열림 유무를 확인 하여야 한다.
이를 막기 위해선 에러 트랩핑을 해주어야 한다.

***************
LOF([파일핸들])
***************
현재 Open으로 열린 파일의 크기를 되돌린다. 

<Example>
'--------------------------
Open "a.exe" For Binary as #1
Text1.text = Cstr(Lof(1))
'--------------------------
[!] 반드시 Open으로 열어놓은 후에 사용하셔야 합니다.

***************
LOC([파일핸들])
***************
파일내의 현재 위치를 반환한다.
텍스트 파일인경우 현재의 바이트(위치)를 18로 나누어 반환한다.
렌덤모드 파일은 마지막으로 읽거나 작성된 레코드 번호를 반환한다.
바이너리모드 파일은 현재 위치(바이트)를 반환한다.
<Example>
'--------------------------
Open "a.dat" For Binary as #1
Text1.text = Cstr(Loc(1))
Close #1
'--------------------------
**********************
MKDIR [경로 및 폴더이름]
**********************
새 폴더를 만든다

<Example>

'--------------------------------------------
Mkdir "c:\aaa" '루트 밑에 aaa라는 폴더를 생성한다 
'--------------------------------------------

******************************
NAME [변경대상이름] AS [새이름]
******************************
파일 또는 폴더의 이름을 변경한다.

<Example>
'---------------------------------------------------------------------------
Name "C:\aaa" as "C:\aaa1" '폴더의 이름을 변경합니다.
Name "a.txt" as "a1.txt" '파일의 이름을 변경합니다.
Name "C:\aaa\file.txt" as "C:\bbb\file.txt" '이동합니다, MOVE와 같은 작업을 합니다.
'---------------------------------------------------------------------------
[!] 맨 마지막것을 이용하면 MDIR의 Move기능도 구현할 수 있습니다. 

****************************************
OPEN [파일이름] FOR [모드] AS #[파일핸들]
****************************************

파일을 제어 하기 위해 파일을 여는일을 한다. 파일제어에 가장 처음 할것이다.

<Example>

'---------------------------------------------------------
Open "a.txt" For Input as #1  ' 텍스트모드 읽기로 연다
Open "a.txt" For Output as #2  '텍스트모드 쓰기로 연다
Open "a.txt" For Append as #3  '텍스트모드 추가로 연다
Open "a.dat" For Random as #4  '랜덤모드로 읽기/쓰기로 연다
Open "a.exe" For Binary as #5  '바이너리모드로 읽기/쓰기로 연다
'---------------------------------------------------------

[!] Output모드는 같은 이름의 파일이 존재 할때 제거하고 덮어쓰기로 파일을 연다..
Append모드는 같은 이름의 파일이 있을때 주로 사용하는데.. 계속 이어서 작업할때
사용하는 모드이다.  텍스트 모드에서만 기능이 구분되고 나머지는 공용으로 연다.

***************************************
PUT #[파일핸들], [기록할 위치], [버퍼변수]
***************************************
;이것 또한 GET와 함께 그래픽 명령어로도 사용되었지만.. 비베에선 파일 입출력
시에나 쓰게되는 명령어가 되었다.  원하는 위치에서 데이터를 기록한다

<Example>
'파일의 처음부분에 "AAAAA"를 기록한다.
'위치를 생략하면, 처음또는 이전에 작업하던위치 바로 뒤에 기록한다.

'-----------------------------------------------
Open "a.exe" for Binary as #1
PUT #1, , "AAAAA"  '파일 처음에 기록한다.
PUT #1, , "BBBBB"    ' "AAAAA"의 바로뒤에 기록된다.
'-----------------------------------------------

[!] 특정부분의 위치를 지정할경우 해당 위치에 기록하며, 위처럼 생략하면,
파일을 열자마자 했을경우엔 파일처음, 파일을 열고 동일 파일에 제어한적이
있을경우 바로 그 뒤에 기록한다. 
이 위치는 기본적으론 바이트 단위로 이동이 되며, 비베의 경우 유니코드 때문에..
한글의 경우 한글한글자를 1바이트에 상응하는 크기로 처리하여 한번에 2바이트씩 제어가 된다.

**********************
RMDIR [경로 및 폴더이름]
**********************
지정된 폴더를 지웁니다. 
도스에서는 행당폴더 내에 파일이 존재 하지 않아야 하는데.. 비베에서도 아마..

<Example>
'--------------
RMDIR "c:\aaa"
'--------------
*****************************************
SEEK #[파일핸들], [새 위치] 또는 ([파일핸들])
*****************************************

파일내의 포인터를 원하는 위치로 이동 또는 현재 작업위치를 반환한다.

<Example>
'---------------------------------------------
SEEK #1, 10 '포인터를 10바이트 위치로 이동한다.
Text1.text = SEEK(1) '현재 포인터의 위치를 반환한다.
'---------------------------------------------
[!] 이동은 주로 텍스트모드에서, 위치읽기는 바이너리, 랜덤, 텍스트 모두 사용되어진다.
물론 해당 파일을 OPEN으로 연후에 사용하여야 한다. OPEN을 제외한 모든..
파일제어문은 OPEN으로 파일을 열어놓은 상태에서 그 해당 파일의 핸들을 가지고 
제어하게 됩니다. 꼭 알아두세여..
****************************
WRITE#[파일핸들], [데이터]
****************************
주로 파일에 저장할때 사용되는데, 있는그대로 저장한다.

<Example>
'파일이 열렸다고 가정 (텍스트모드로..)

'-----------------
WRITE #1, "AAAAA"
'-----------------

'파일에 AAAAA라고 기록되지 않고 "AAAAA" 로 따옴표까지 저장된다.

[!] 텍스트 모드에서 Input으로 항목형식으로 읽을 수 있도록 할 수 있다.

profile

허당 레몬도리

@LemonDory

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!