ASP에서 FSO는 파일 시스템 객체 인 파일 시스템 객체를 의미합니다.
조작하려는 컴퓨터 파일 시스템은 웹 서버에있는 것을 의미합니다. 따라서 이에 대한 적절한 권한이 있는지 확인하십시오. 이상적으로는 자신의 컴퓨터에서 웹 서버를 설정하여 테스트를 쉽게 수행 할 수 있습니다. Windows에서 실행중인 경우 Microsoft의 무료 개인 웹 서버 PWS를 사용해보십시오.
FSO 모델 객체
드라이브 객체 : 디스크 또는 네트워크 드라이브에 액세스하기위한 객체 드라이브
FileSyStemObject 객체 : 파일 시스템 객체 컴퓨터 파일 시스템에 액세스하기위한 개체
폴더 개체 : 폴더의 모든 속성에 액세스하기위한 폴더 개체
텍스트 스트림 객체 : 파일 내용에 액세스하기위한 텍스트 스트림 객체
위의 개체를 사용하여 파괴 활동을 포함하여 컴퓨터에서 무엇이든 할 수 있습니다. 이 기사에서는 FileSystemObject 및 TextStream 객체에 중점을 둔 강력하고 간단한 방법을 제공합니다.
FSO는 Microsoft에 의해 구동되며 ASP는 더 이상 비 독사 시스템에서 사용할 수 없을 것입니다.
FSO를 사용하는 방법?
FSO를 사용하여 모든 작업을 수행하려면 먼저 객체를 작성하면 코드가 다음과 같습니다.
| < %set fso = server.createobject (scripting.filesystemobject) % > |
이것은 FSO를 생성하고 변수 FSO를 할당하면 친숙한 객체를 사용하여 파일 시스템의 작동을 수행 할 수 있습니다 [개체 및 개체 마법사 프로그래밍에 대한 더 많은 지식은 시각적 기본 문서를 참조하십시오. 여기서는 FSO.Method 또는 FSO.Property를 사용할 수 있으며 다음 예제에서 볼 수 있습니다.
FSO 모델은 Microsoft가 제공하는 스크립트 런타임 DLL 파일 (scrun.dll)에 있습니다. MS Access, Word와 같은 모든 응용 프로그램 에서이 DLL 파일을 참조 할 수 있습니다. 즉, ASP에 적용하는 것만으로는 제한되지 않습니다.
다음은 FSO 방법의 간단한 목록입니다.
| FSO 방법 | |
| 카피 파일 | 하나 이상의 파일을 새 경로로 복사하십시오 |
| CreateTextFile | 파일을 만들고 텍스트 스트림 객체를 반환하십시오 |
| 삭제 | 파일을 삭제하십시오 |
| opentextfile | 파일을 열고 읽거나 부여하기 위해 텍스트 스트림 객체를 반환합니다. |
완전한 FSO 방법 및 속성을 알고 싶다면 Microsoft MSDN을 참조하십시오. 아래 몇 가지 예를 봅시다.
사용자 정보를 저장하는 데이터베이스를 작성할 수있는 간단한 방명록을 작성한다고 가정 해 봅시다. 그러나 FSO를 사용하여 정보를 저장하면 데이터베이스의 전력이 필요하지 않은 경우 시간과 비용이 절약됩니다. 또한 일부 ISP는 웹에서 데이터베이스 응용 프로그램을 제한 할 수 있습니다.
양식으로 일부 사용자 정보를 수집했다고 가정 해 봅시다. 간단한 양식 HTML 코드는 다음과 같습니다.
| HTML t body > form action = formhandler.asp 메소드 = Post > < 입력 유형 = 텍스트 크기 = 10 이름 = 사용자 이름 > < 입력 유형 = 텍스트 크기 = 10 이름 = 홈페이지 > < 입력 유형 = 텍스트 크기 = 10 이름 = 이메일 > < /양식 > < /바디 > < /html > |
formhandler.asp에서 양식을 처리하는 코드를 살펴 보겠습니다.
| < % '양식 정보를 얻으십시오 strname = request.form (사용자 이름) strhomepage = request.form (홈페이지) stremail = request.form (이메일) 'FSO 객체를 만듭니다 set fso = server.createobject (scripting.filesystemobject) |
지금까지 새로운 것은 양식 필드의 값을 얻고 변수에 값을 할당하는 것 이상입니다. 흥미로운 부분이 아래에 나타납니다 - 파일 작성 :
| 경로 = C : emp est.txt forreading = 1, forwriting = 2, forAppending = 3입니다 '파일을 엽니 다 set file = fso.opentextfile (경로, forappending, true) '파일에 정보를 작성하십시오 file.write (strname) & vbcrlf file.write (strhomepage) & vbcrlf file.write (stremail) & vbcrlf '닫고 정리하십시오 file.close 파일 = 아무것도 설정하지 않습니다 FSO = 아무것도 설정하지 않습니다 |
OpentExtFile 메소드는 FSO 모델의 또 다른 객체 인 TextStream 객체를 반환합니다. TextStream 객체는 라인 작성, 읽기 및 건너 뛰는 것과 같은 파일 컨텐츠를 조작하는 방법을 보여줍니다. VB Constant VBCRLF는 Newline 캐릭터를 생성합니다.
True는 OpenTextFile의 명령 매개 변수에 정의되어 있으며 파일이 존재하지 않으면 시스템을 작성하십시오. 파일이 존재하지 않고 실제 매개 변수가 정의되지 않으면 오류가 발생합니다.
이제 디렉토리 C : EMP, Open Test.txt로 이동하면 다음 정보를 볼 수 있습니다.
| 사용자 이름 사용자의 홈페이지 사용자의 이메일 |
물론,이 단어들은 형식에 입력 된 모든 것으로 대체 될 수 있습니다.
이제 일부 사용자 정보는 간단한 데이터베이스와 같이 파일에 저장됩니다. 데이터베이스와 같은 구조화 된 열이 없기 때문에 모든 방문자를 알고 싶어하고 등록 된 정보와 분리 해야하는 사용자가 있다고 가정합니다.
생성 된 파일에서 1 행은 사용자 이름, 2 행은 홈페이지이며 3 행은 이메일 주소라는 것을 알고 있습니다. 등록 된 사용자는 또한 정보를이 구조에 저장하므로 3 줄마다 하나의 사용자의 등록 정보가 포함됩니다. 이를 알면 다음 코드를 작성하여 정보를 표시 할 수 있습니다.
| < % 'FSO 객체를 만듭니다 set fso = server.createobject (scripting.filesystemobject) 경로 = C : emp est.txt '파일을 엽니 다 set file = fso.opentextfile (Path, 1) <- for 독서 |
다음으로 각 행을 분석하고 데이터를 형식화하십시오.
| aTendOfStream까지 수행하십시오 response.write (이름 : & file.readline &) response.write (홈 페이지 : & file.readline &) response.write (이메일 : & file.readline & < p >) 고리 '닫고 정리하십시오 file.close 파일 = 아무것도 설정하지 않습니다 FSO = 아무것도 설정하지 않습니다 %> |
이것은 매우 간단한 출력이지만 상황에 따라 테이블 또는 DHTML 양식 정보를 포함 할 수 있습니다.
파일이 올바르게 작성되고 작성된 경우 위의 작은 루프는 데이터베이스의 모든 사람의 정보를 올바르게 나열합니다. Readline 메소드는 Newline이 발생할 때까지 1 줄의 컨텐츠를 읽고 후속 readline 호출은 다음 줄을 읽습니다. AtendofStream은 파일의 꼬리를 만날 때 우리에게 알려주는 텍스트 스트림 객체의 속성입니다.
어떤 이유로 든 파일을 올바르게 형성하지 않는다고 가정합니다. 사용자가 3 줄 대신 2 줄의 정보 만 있으면 일부 오류가 발생합니다. 우리의 루프는 파일에 다음 3 줄의 정보를 검색합니다.
| 서버 객체 오류 'ASP 0177 : 800A003E' |
따라서 불필요한 라인이 파일에 삽입되지 않거나 필요한 줄 정보가 누락되지 않도록 오류 처리 코드를 추가하십시오.
기본 지식은 위에서 논의 된 다음 권한 및 권한 문제에 대해 설명합니다. FSO는 사용자 계정을 생성하는 사용자 계정으로 실행됩니다. 즉, 누군가가 인터넷에서 귀하의 페이지에 액세스하면이 인터넷 계정이 FSO를 만듭니다. 관리자로 컴퓨터에 로그인하여 페이지에 로그인하면 관리자 계정이 FSO를 생성합니다. 특정 계정에 특정 권한이 있기 때문에 매우 중요하며 FSO에는 기능을 완전히 실행하기 위해 일부 권한이 필요합니다.
인터넷 계정 (IUSER_MACHINENAME, MACHINENAME은 서버 이름입니다)은 일반적으로 읽기 권한 만 가지고 있으므로 사용자가 방명록 파일에 쓸 수 없습니다. 그러나이 문제를 우회 할 수있는 몇 가지 옵션이 있습니다.
우선, 방명록을 채우기 전에 사용자가 서버에 로그인 해야하는 것도 매우 어렵습니다. 그러나 방명록의 핵심 요점은 익명 사용자로부터 정보를 수집하는 것입니다. 사용자에게 로그인을 요청하면 자신이 누구인지 알아야합니다. 따라서이 옵션을 건너 뛰고 다음 옵션을보십시오.
두 번째 방법은 디렉토리 또는 파일을 작성하는 것이며 iuser_machineName 사용자에게는 쓰기 권한이 있습니다. 올바른 디렉토리를 알고 웹 기술이있는 사람은 서버의 컨텐츠를 작성할 수 있기 때문에 잠재적 인 보안 취약점을 열 수 있습니다. 이것은 심각한 금기입니다. 따라서 이러한 쓰기 가능한 디렉토리의 정보가 숨겨진 장소에 저장되고 이러한 디렉토리를 웹 디렉토리 구조 외부에 가능한 한 많이 설정했음을 확인해야합니다 (예 : Windows에서는 InetPub 디렉토리가 아닌 디렉토리입니다).
당신은 생각할 것입니다 : 좋아, 이제 파일에 쓰는 방법을 알고 있습니다. 그러나 우리는 더 할 수 있습니까? 웹 사이트에 대한 검색 기능을 작성해 보겠습니다.
검색 엔진 구축의 열쇠는 재귀입니다. 주로 코드를 작성하여 디렉토리에서 파일을 검색 한 다음 모든 디렉토리 루프에서 동일한 코드를 실행하십시오. 총 얼마나 많은 하위 디렉토리 수를 결정할 수 없으므로, 검색 코드는 완료 될 때까지 반복해서 실행해야합니다. 재귀 통화는 매우 좋습니다!
검색 페이지를 만들어 봅시다. 사용자가 검색 문자열을 입력하는 HTML 양식이 작성되었다고 가정하십시오.
| Dim Objfolder dim strsearchtext Dim objfso strsearchText = request.form (searchText) <- 검색 문자열입니다 'FSO 및 폴더 개체를 만듭니다 set fso = server.createobject (scripting.filesystemobject) set objfolder = objfso.getfolder (Server.mappath (/)) Objfolder를 검색하십시오 |
위의 코드는 단순히 변수를 초기화하고 검색 함수는 검색 함수를 실행하며 다음과 같이 설명합니다.
| 기능 검색 (objfolder) Dim Objsubfolder '현재의 모든 파일을 통해 루프 접는 사람 objfolder.files의 각 objfile에 대해 읽기를 위해 objtextstream = objfso.opentextfile (objfile.path, 1) <을 설정하십시오 '파일의 내용을 a로 읽으십시오 변하기 쉬운 strfilecontents = objtextstream.readall '검색 문자열이 파일에 있으면 링크를 작성하십시오 '파일에 악기 (1, strfilecontents, strsearchtext, 1) 인 경우 응답. write < a href =/ & objfile.name & _ > & objfile.name & < /a >< br > bolfilefound = true 끝 If objtextstream.close 다음 '여기에 재귀 부분이 있습니다 '이 디렉토리의 하위 폴더, 검색 기능을 다시 실행하십시오. objfolder.subfolders의 각 objsubfolder에 대해 검색 OBJSUBFOLDER 다음 엔드 기능 |
파일을 열 수 있으려면 FSO에는 웹 경로가 아닌 실제 파일 경로가 필요합니다. 예를 들어, www.enfused.com/temp/index.html 또는 /temp/index.html이 아닌 c : inetpubwwwwwwroot empiindex.html입니다. 후자를 전자로 변환하려면 Server.mappath (filename)를 사용하여 파일 이름을 사용하여 웹 경로 이름을 나타냅니다.
위의 코드는 지정한 초기 디렉토리의 폴더의 각 하위 디렉토리에서 실행됩니다. 여기서 초기 디렉토리는 웹 루트 디렉토리/를 나타냅니다. 그런 다음 디렉토리에서 각 파일을 열면 지정된 문자열이 포함되어 있는지 확인하십시오. 해당 파일에 대한 링크가 표시됩니다.
파일 및 하위 디렉토리 수가 증가함에 따라 검색에 걸리는 시간이 증가합니다. 무거운 검색 작업이 필요한 경우 Microsoft의 Index Server Index Server와 같은 다른 방법을 사용하는 것이 좋습니다.
이 시점에서 FSO를 잘 이해할 수 있습니다. 더 복잡한 문제를 해결하기 위해 더 자세히 살펴 보겠습니다.
먼저 파일의 이름을 바꿀 수 있습니다. 모든 문서를 추적하려면 시스템이 쉽게 구별 할 수 있도록 독특한 문서를 바꾸고 싶을 것입니다. 불행히도 FSO는 간단한 파일 이름 변경 작업을 허용하지 않으므로 수정해야합니다.
| < % 'FSO 객체를 만듭니다 set fso = server.createobject (scripting.filesystemobject) 경로 = C : emp est.txt strdate = replace (date (), /,) strdir = c : inetpubwwwwrootarticles & strdate strnewfilename = Hour (지금) & _ & minute (지금) & _ & 두 번째 (현재) & .html '이전 파일을 엽니 다 파일을 설정하십시오 = fso.opentextFile (Path, 1) - 읽기를 위해 strtext = file.readall 파일 = 아무것도 설정하지 않습니다 '폴더를 확인 및/또는 생성합니다 fso.dolerexists가 아닌 경우 (Server.mappath (strdir)) f = fso.createfolder (server.mappath (strdir)) 또 다른 set f = fso.getfolder (Server.mappath (strdir)) 끝 If '새 파일을 만들고 작성하십시오 set file = fso.creatextfile (f.path & & strnewfilename) file.write (strtext) f = 아무것도 설정하지 않습니다 file.close 파일 = 아무것도 설정하지 않습니다 '이전 파일을 삭제하십시오 fso.deletefile (path & & rst (filename) & i) '정리 FSO = 아무것도 설정하지 않습니다 %> |
FSO 기능의 부족은 여기서 유리한 것이되었으며 한 번에 2 단계를 수행 할 수 있습니다. 먼저 파일을 열고 파일의 내용을 읽으십시오. 여기서 기사를 저장할 고유 한 폴더와 고유 한 파일을 만들고 싶다고 가정 해 봅시다. 그러나 폴더로가는 경로는 매일 변경되므로 먼저 폴더가 이미 존재하는지 여부와 존재하지 않으면 작성해야합니다. 이것은 FSO가 아닌 if FSO에서 수행됩니다. 그런 다음 그 길을 따라 새 파일을 만듭니다. 새 파일이 생성 된 후 FSO.DeleteFile을 통해 수행되는 이전 파일을 삭제하십시오.
이 두 단계는 다음과 같습니다. 파일 이름을 바꾸고 더 적합한 디렉토리로 이동하십시오. 새 파일에 작성하기 전에 콘텐츠 편집과 같은 파일에서 더 많은 작업을 수행 할 수도 있습니다.
FSO에는 몇 가지 약점이 있습니다. 예를 들어, 워드 문서, 많은 그래픽 형식의 파일 및 기타 파일을 포함하는 이진 파일을 처리하기가 어렵습니다. 그러나 다른 방식으로 이러한 파일을 조작 할 수 있습니다. 이동하고 삭제하는 등. 당신이 할 수없는 일은 열거 나 글을 쓰는 것입니다.
또 다른 한계는 파일 길이의 문제입니다. 일부 컨텐츠를 즉시 읽고 쓰면 모든 정보가 메모리에 저장됩니다. 콘텐츠가 많을수록 메모리가 더 많아집니다. 이것은 모든 직업을 늦출 것입니다. 따라서 매우 큰 파일 또는 많은 수의 작은 파일을 조작 해야하는 경우 파일을 작은 조각으로 나누고 메모리를 자주 지우는 것을 고려하십시오. COM 객체 구성 요소에 응용 프로그램을 통합하면 프로그램 속도가 크게 향상 될 수 있습니다.
마찬가지로 FSO를 사용하여 권한 및 파일 및 폴더 속성을 관리 할 수 없습니다. 보안 암호화를 수행하는 좋은 방법은 앞서 언급 한 방명록 파일을 읽기 전용으로 설정 한 다음 필요한 경우 Writable으로 설정하는 것입니다. 이 방법은 종종 CGI 및 PERL에서 사용되지만 불행히도 FSO로이를 구현하는 만족스러운 방법은 없습니다.
FSO로 무엇을 할 수 있습니까?
FSO에는 많은 훌륭한 기능이 있지만 많은 사람들이 그것을 깨닫지 못합니다. 이 기능은 종종 무언가를하기가 어렵다고 생각하면 종종 발견됩니다.
다음은 이러한 불안하지만 매우 멋진 기능 중 일부입니다.
거의 이해되지 않는 FSO 기능
getSpecialfolder 메소드는 특정 Windows 폴더로 경로를 반환합니다. Windows System Directory; getAbsolutePathName 메소드 요구 사항 임시 데이터를 저장할 때 폴더 (Server.Mappath와 유사)에 대한 절대 경로를 반환합니다.
예를 들어, fso.getabsolutepathname (지역)은 다음과 유사한 결과를 반환합니다. C : MyDocsmyfolder 산화물
getextensionName 메소드 경로의 마지막 부분의 확장을 반환합니다 (예 : fso.getextensionName (c : docs est.txt)이 txt를 반환합니다) getBaseName 및 getParentFolder 메서드는 경로의 마지막 부분의 부모 폴더를 반환합니다.
(예 : FSO.GetParentFolder (C : DocsmyDocs)는 'Docs'를 반환합니다) Drives 속성은 리소스 브라우저와 같은 사용자 인터페이스를 설정하기 위해 로컬로 사용 가능한 모든 드라이브의 컬렉션을 반환합니다.
위의 함수를 사용하는 경우 오류 처리를위한 코드를 만드는 것이 가장 좋습니다. 필요한 매개 변수가 존재하지 않으면 귀찮은 정보가 생성되기 때문입니다.
요약
우리가 보았 듯이 FSO는 매우 유용하며 여기에서 소개하는 것은 빙산의 일각입니다. FSO를 사용하여 강력한 응용 프로그램을 구축하고 많은 작업을 완료 할 수 있습니다.