首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ColdFusion -需要遍历文件夹以从SQL查询中查找特定文件,并将其复制或压缩到临时文件夹中。

ColdFusion -需要遍历文件夹以从SQL查询中查找特定文件,并将其复制或压缩到临时文件夹中。
EN

Stack Overflow用户
提问于 2019-02-06 01:09:24
回答 2查看 497关注 0票数 1

我正在尝试遍历服务器上的一个文件夹,以获取特定文件的列表,然后将这些文件复制到临时目录或压缩并复制到临时目录。然而,我总是碰壁,因为我不知道该怎么做。(仍然是ColdFusion的业余爱好者)

因此,我在这里执行一个SQL查询,检索我正在查找的特定日期的确切附件:

代码语言:javascript
复制
<cfquery name="test" datasource="test" cachedwithin="#CreateTimeSpan(0,0,10,0)#" result="r">
SELECT Test.TestNum, Test1.Test1Date, TestReport.Attachment
FROM Test
INNER JOIN more SQL code here..
WHERE Test1.Test1Date >= '#daterangevariablehere#'
AND NOT more SQL code here as well..
ORDER BY Test.TestNum
</cfquery>

SQL查询是正确的,因为在SQL Server Mgmt Studio中,它可以正确执行,甚至在我尝试执行cfdump之前,它就会显示我正在尝试获取的文件的正确列表。然而,当我试图遍历它们以复制或压缩它们时,它是一个完全失败的->空白页面。

我试着:

代码语言:javascript
复制
<cfloop query="test">
<cfif test.recordcount gt 0>
<cfzip action="zip" file="#LocationOfwhereIwantTheEndResult" source="#WhereTheFolderWithTheAttachmentsReside#">
</cfzip>
</cfloop>

我甚至尝试过这样做,围绕着上面的代码:

代码语言:javascript
复制
<cfdirectory action="list" name="test" directory="#WhereTheFolderWithTheAttachmentsReside#"></cfdirectory>

附注:一些变量和代码是为了安全和anonymity..but而编写的,我想要显示我正在尝试完成的内容的结构,我希望我说得很清楚(!)如果不是这样,请让我知道,我会提供更多的细节或信息。任何帮助都是非常感谢的,我一直在用头撞墙,我觉得这可能是非常简单的事情。请帮帮忙!:)

EN

回答 2

Stack Overflow用户

发布于 2019-02-06 02:15:47

在不知道实际值的情况下,您的查询听起来像是包含单个文件的绝对路径。一种选择是遍历查询并为每个文件添加一个cfzipparam。这里有一个独立的例子,你可以适应。(它使用CFML,因为这就是您的示例中的内容,但是如果您熟悉脚本语法,请在上面的链接中查找基于cfscript的版本)。

CFML示例:

代码语言:javascript
复制
<!--- For Demo only to simulate your database query --->
<cfset test = queryNew("Attachment"
            , "varchar"
            , [{Attachment="c:\path\to\fileA.png"}
                , {Attachment="c:\path\to\fileB.png"}
                , {Attachment="c:\path\to\fileC.png"}
            ])>

<cfzip action="zip" file="c:\path\to\TheNameYouWant.zip">
    <cfloop query="test">
        <!--- If Attachment only contains a file name (i.e. "someFileName.pdf") 
           use your variables to build a full path, i.e. "c:\path\to\someFileName.pdf" 
         --->
        <cfzipparam source="#Attachment#">
    </cfloop>
</cfzip>

CFScript示例

代码语言:javascript
复制
<cfscript>
   test = queryNew("Attachment"
            , "varchar"
            , [{Attachment="c:\path\to\fileA.png"}
                , {Attachment="c:\path\to\fileB.png"}
                , {Attachment="c:\path\to\fileC.png"}
            ]);

    cfzip (action="zip", file="c:\path\to\TheNameYouWant.zip") {
        for (row in test) {
            cfzipparam (source=row.Attachment);
        }
    }
</cfscript>

简而言之,你不必张贴实际的路径。大多数时候,它无论如何都是无关紧要的;-)但是,请发布代表实际路径的硬编码值-而不是变量。原因是变量留下了许多未解决的问题,这些问题可以很容易地通过使用c:\path\to\fileA.pdf这样的虚拟路径来回答。在这种特定的情况下,了解像o/s这样的东西,无论源是文件/目录还是相对/绝对路径,将有助于我们立即排除几个潜在的问题。

票数 2
EN

Stack Overflow用户

发布于 2019-02-06 01:25:45

代码语言:javascript
复制
<cfif test.recordcount>
  <cfloop query="test">
    <cfzip action="zip" file="#LocationOfwhereIwantTheEndResult#" source="#WhereTheFolderWithTheAttachmentsReside#">
    </cfzip>
  </cfloop>
</cfif>

我怀疑您的filesource位置不正确。使用ExpandPath()函数来确保它会被放到正确的位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54539667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档