Удаление всех пустых каталогов в определенной папке в Coldfusion - PullRequest
1 голос
/ 20 мая 2011

Я работаю над проектом, где мне нужно удалить все пустые папки (каталоги) из определенного места. Я уверен, что нет прямого способа найти пустой каталог в папке. Я просто пишу ниже метод, чтобы удалить пустую папку в иерархии. Может у кого-нибудь есть лучшее решение?

<cffunction name="deleteEmptyFolder" access="public" output="true" returntype="boolean">
  <cfargument name="path" required="true" type="string" />
  <cfset var qList="">
  <cfset var qDir = "">
  <cfset var qFiles = "">
  <cfset var isEmpty = 1>
  <!--- List Directory --->
  <cfdirectory action="list" directory="#arguments.path#" recurse="no" name="qList">
  <!--- get sub directory list --->
  <cfquery name="qDir" dbtype="query">
  select * from qList where type='Dir'
  </cfquery>
  <!--- Call recursive function to check directory empty or not --->
  <cfloop query="qDir">
    <!--- If sub directory not empty mark current directory as not empty. --->
    <cfif not deleteEmptyFolder(qDir.directory & "\" & qDir.name)>
      <cfset isEmpty=0>
    </cfif>
  </cfloop>

  <!--- Check for file exists in current directory --->
  <cfquery name="qFiles" dbtype="query">
  select * from qList where type='File'
  </cfquery>
  <!--- If file exists mark as not empty --->
  <cfif qFiles.recordCount gt 0>
    <cfset isEmpty = 0>
  </cfif>

  <!--- If current directory empty then delete it --->
  <cfif isEmpty>
    <cfdirectory action="delete" recurse="false" directory="#arguments.path#">
  </cfif>
  <!--- Return empty status for current directory --->
  <cfreturn isEmpty>
</cffunction>

Ответы [ 2 ]

2 голосов
/ 23 мая 2011
<cffunction name="deleteEmptyFolders" output="false">
    <cfargument name="path" required="true" />
    <cfset var subfolders = "" />
    <cfdirectory name="subfolders" action="list" directory="#path#" type="dir" />
    <cfloop query="subfolders">
        <cfset deleteEmptyFolders("#path#/#subfolders.name#") />
    </cfloop>
    <cftry>
        <cfdirectory action="delete" directory="#path#" />
        <cfcatch></cfcatch>
    </cftry>
</cffunction>

Редактировать: ловушка ошибок существует только для того, чтобы упростить код и избежать других вызовов списка файлов. Вы также можете использовать это вместо ...

<cfdirectory name="files" action="list" directory="#path#" />
<cfif not files.recordcount>
    <cfdirectory action="delete" directory="#path#" />
</cfif>
1 голос
/ 20 мая 2011

воспользуйся следующим, это послужит цели, хотя я не программист cf

<!---Deleting a directory 
Check that the directory exists and that files are not in the directory to avoid getting ColdFusion error messages. --->

<cfset currentDirectory = GetDirectoryFromPath(GetTemplatePath()) & "otherNewDir">
<!--- Check whether the directory exists. --->
<cfif DirectoryExists(currentDirectory)>
    <!--- If yes, check whether there are files in the directory before deleting. --->
    <cfdirectory action="list" directory="#currentDirectory#" 
    name="myDirectory">
    <cfif myDirectory.recordcount gt 0>
    <!--- If yes, delete the files from the directory. --->
        <cfoutput>
        <p>Files exist in this directory. Either delete the files or code 
            something to do so.</P>
        </cfoutput> 
    <cfelse>
    <!--- Directory is empty - just delete the directory. --->
        <cfdirectory action = "delete" directory = "#currentDirectory#">
        <cfoutput>
        <p>The directory existed and has been deleted.</P>
        </cfoutput>
    </cfif> 
<cfelse>
    <!--- If no, post message or do some other function. --->
    <cfoutput><p>The directory did NOT exist.</p></cfoutput>
</cfif> 

ИСТОЧНИК ОТВЕТА

...