파일제어 관련자료 ************************ 이벤트로 파일이 없으면 복사 ************************ '------------------------------- 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으로 항목형식으로 읽을 수 있도록 할 수 있다.
허당 레몬도리
@LemonDory
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!