1. ホーム
  2. Web プログラミング
  3. ASP プログラミング
  4. アプリケーションのヒント

ASPでフォルダーの存在を検出し、存在しない場合は自動的に作成する方法

2022-01-18 09:30:57

直接スクリプトホームテストを共有するために、通常のコードをテストするために使用することができ、マルチレベルのディレクトリの作成をサポートする

コード1

 Function CreateMultiFolder(ByVal CFolder) 
        Dim objFSO, PhCreateFolder, CreateFolderArray, CreateFolder 
        Dim i, ii, CreateFolderSub, PhCreateFolderSub, BlInfo 
        BlInfo = False 
        CreateFolder = CFolder 
        On Error Resume Next 
        Set objFSO = Server.CreateObject("Scripting.FileSystemObject") 
        If Err Then 
            Err.Clear() 
            Exit Function 
        End If 
        If Right(CreateFolder, 1) = "/" Then 
            CreateFolder = Left(CreateFolder, Len(CreateFolder) - 1) 
        End If 
        CreateFolderArray = Split(CreateFolder, "/") 
        For i = 0 To UBound(CreateFolderArray) 
            CreateFolderSub = "" 
            For ii = 0 To i 
                CreateFolderSub = CreateFolderSub & CreateFolderArray(ii) & "/" 
            Next 
            PhCreateFolderSub = Server.MapPath(CreateFolderSub) 
            If Not objFSO.FolderExists(PhCreateFolderSub) Then 
                CreateFolder(PhCreateFolderSub) 
            End If 
        Next 
        If Err Then 
            Err.Clear() 
        Else 
            BlInfo = True 
        End If 
        CreateMultiFolder = BlInfo 
End Function

使用方法

CreateMultiFolder("/202003/tools/")

コード2、テストOK

'Automatically create multipole directories
' code by jb51 reterry
function createit(path)
dim fsofo,cinfo,thepath,thepatharray
dim i,ii,binfo
binfo=false
thepath=path
set fsofo=createobject("scripting.filesystemobject")
if err then
err.clear
exit function
end if
thepath=replace(thepath,"\","/")
if left(thepath,1)="/" then
thepath=right(thepath,len(thepath)-1)
end if
if right(thepath,1)="/" then
thepath=left(thepath,len(thepath)-1)
end if
thepatharray=split(thepath,"/")
for i=0 to ubound(thepatharray)
createfoldersub1=createfoldersub1&thepatharray(i)&"/"
createfoldersub=server.mappath(createfoldersub1)
if not fsofo.folderexists(createfoldersub) then
fsofo.createfolder(createfoldersub)
end if
next
if err then
err.clear
else
binfo=true
end if
createit=binfo
end function

テストコード

createit("/202004/tools/")

上記のコードがうまくいかない場合は、iisの実行ユーザーに書き込み権限があるかどうかを確認してください。本日テストしたところ、デフォルトのiis 7.5では動作しませんでした。

以下のコードは機能的にシンプルであり、学習用として適しています。

How can ASP detect if a folder exists, or create it automatically if it doesn't exist?

folder=server.mappath("/imagess") 
Set fso = CreateObject("Scripting.FileSystemObject") 
if fso.fileexists(Server.mappath(filepath)) then 
respnse.write("all have what to build ") 
else 
fso.createfolder(folder) 
end if 
Set fso = nothing

Dim objFSO 
Set objFSO = Server.CreateObject("Scripting.FileSystemObject") 
If objFSO.FolderExists(Server.MapPath(SavePath))=false Then 
CreateFolder(Server.MapPath(SavePath)) 
End If

folder=server.mappath("/imagess") 
Set fso = CreateObject("Scripting.FileSystemObject") 
if fso.fileexists(Server.mappath(filepath)) then 
respnse.write("all have what to build ") 
else 
fso.createfolder(folder) 
end if 
Set fso = nothing  

どれも完璧ではありません。オーナーは、深さのないディレクトリを作るという意味で、私が書いたものをあげているのだと思います。 

'Create a new folder (allows classless creation) 1:35 2005-1-31 

Public Function CreateFolder(FolderPath) 
Dim sObjFSO 
Dim arrFolder 
Dim i 

Set sObjFSO = Server.CreateObject("Scripting.FileSystemObject") 
FolderPath = Replace(FolderPath,"\","/") 
arrFolder = Split(FolderPath,"/") 
On Error Resume Next 

For i = 0 To UBound(arrFolder) 
If i > 0 Then arrFolder(i) = arrFolder(i-1) & "/" & arrFolder(i) 
If Not sObjFSO.FolderExists(arrFolder(i)) Then 
CreateFolder(arrFolder(i)) 
End If 
Next 
CreateFolder = True 

If Err.number <> 0 Then 
CreateFolder = False 
Err.Clear 
End If 
End Function 


フォルダの作成

dim fso,SavePath
SavePath=server.MapPath(". \"&imagefile&"\"&username&"\"\"&specialname&"")
set fso = server.CreateObject("scripting.filesystemobject") 
if fso.FolderExists(SavePath)=false then 
fso.createfolder(SavePath) 
end if
set fso=nothing

フォルダの削除

dim fso,SavePath
SavePath=server.MapPath(". \"&imagefile&"\"&username&"\"\"&specialname&"")
set fso = server.CreateObject("scripting.filesystemobject") 
if fso.FolderExists(SavePath)=true then 
fso.deletefolder(SavePath) 
end if
set fso=nothing

ファイルをコピーする

dim fso
set fso=server.CreateObject("scripting.filesystemobject")

sub copyfiles(path,path2)
 set mycopy=fso.getfile(path)
 response.flush()
 mycopy.copy path2
 response.write("<b>installed success ! &nbsp;&nbsp;</b>"&path2&"<br>")
 response.Flush()
 end sub
call copyfiles(Server.MapPath(". /no_title2.bmp"),"D:\website_projects\photo\aspupload\07_images\")


他のユーザーが追加した内容は以下の通りです。

Public Function CheckAndCreateFolder(FolderName)
  fldr = Server.Mappath(FolderName)
  Set fso = CreateObject("Scripting.FileSystemObject")
  If Not fso.FolderExists(fldr) Then
   CreateFolder(fldr)
  End If
  Set fso = Nothing
End Function

 フォルダが存在するかどうかをチェックし、存在しない場合はフォルダを作成します。この関数の戻り値はありません。

例 CheckAndCreateFolder("ASP")

ASP フォルダがカレントディレクトリに存在するかどうかを確認し、存在しない場合は ASP フォルダを作成します。

 FS上のASP関数 fso関数は、ファイルやフォルダに関連する操作に使用されます。

'//Provides a generic interface for file handling
Class FileSystemObject
'/*
' * Function description:Delete a file
' * Input parameter: FileName - relative path to the file
'*Public Function DelFile(FileName)
 Dim getPath
 getPath="/"
 SET Fso=Server.CreateObject("Scripting.FileSystemObject")
 getPath=Replace(getPath&FileName,"//","/")
 if Fso.FileExists(Server.MapPath(getPath))=True then
   Fso.DeleteFile Server.mappath(getPath)
 End if
 Set Fso=Nothing
End Function

 

'/*
' * Function: Determine if the path exists, if not, create it.
' * Input parameter: SaveFilePath - relative path, such as: /UploadFiles'*Public Function CreatePath(SaveFilePath)
 Dim DeclarePath,FileObj,FilePath
 DeclarePath="/"
 
 Set FileObj=Server.CreateObject("Scripting.FileSystemObject") 
 For Each FilePath in split(SaveFilePath,"/") 
   DeclarePath=Replace(DeclarePath&FilePath&"/","//","/") 
   if FileObj.FolderExists(Server.MapPath(DeclarePath))=false then 
     FileObj.CreateFolder(Server.MapPath(DeclarePath))'Create folder
   end if
 Next 
 Set FileObj=nothing
 CreatePath=DeclarePath
End Function

 

'/*
' * Function:Rename a folder
' * Input Parameter: GetPath - path of the folder
' * Input Parameter: OldName - old folder name
' * Input Parameter: NewName - new folder name
'*Public Function RenFolder(GetPath,OldName,NewName) 
 Dim Fso
 if OldName="" or NewName="" then
   exit Function
 else
   if OldName=NewName then exit Function
 end if
 SET Fso=Server.CreateObject("Scripting.FileSystemObject")
 If Fso.FolderExists(Server.MapPath(GetPath&NewName)) then
   response.write"<script language=javascript>alert('Directory already exists!!!') ;this.history.go(-1);</script>"
   response.end()
 end if
 '// create the old folder if it does not exist
 If Not Fso.FolderExists(Server.MapPath(GetPath&OldName)) Then
   CreatePath(GetPath&OldName)
 End if
 
 Fso.MoveFolder Server.MapPath(GetPath&OldName),Server.MapPath(GetPath&NewName)
 set Fso=nothing
 'response.redirect request.ServerVariables("HTTP_REFERER")
End Function

 

'/*
' * Function:Save the current file
' * Input Parameter: GetPath - file path
' * Input Parameter: GetContent - the content to save
' * Input Parameter: GetFile - the name of the saved file
'*Public Function SaveEditFile(GetPath,GetContent,GetFile)
 if GetContent="" or GetFile="" then exit Function
 SET Fso=Server.CreateObject("Scripting.FileSystemObject")
 Set CF=Fso.CreateTextFile(Server.mappath(GetPath&GetFile),true)
 CF.write GetContent
 CF.Close
 set CF=nothing
 set Fso=nothing
 'response.redirect request.ServerVariables("HTTP_REFERER")
End Function

End Class

以上が、ASPがフォルダの存在を検知し、存在しない場合は自動的に作成する仕組みの詳細です。