문제

예를 들어,내가 원하는 그냥"파일이름"에서 파일의 필드가 있습니다.가 myimage.jpg 나만 표시하고 싶은"myimage"어떻게 내가 그니까?

도움이 되었습니까?

해결책

목록을 사용하여 기능을 장점이다.

<cfset FileName = ListDeleteAt(FileFullName, ListLen(FileFullName, "."), ".")>

알고 있어야만 작품에 대한 파일이 실제로는 이름 파일 확장자(으로 정의된 것은 후에 마지막 마침표 뒤에 나오).게 안전하고,다음은 더 나은:

<cfset ExtensionIndex = ListLen(FileFullName, ".")>
<cfif ExtensionIndex gt 1>
  <cfset FileExt  = ListGetAt(ExtensionIndex , ".")>
  <cfset FileName = ListDeleteAt(FileFullName, ExtensionIndex, ".")>
<cfelse>
  <cfset FileExt  = "">
  <cfset FileName = FileFullName>
</cfif>

일을 복잡하게 조금 더:가 있는 파일로 시작하는 점입니다.될 수 있습이 포함된 파일 이름은 많은 인접한 점이 있습니다.목록 기능을 잘못된 결과를 반환한 대로 그들을 무시 빈 목록 요소입니다.수도 있습는 파일이 있는 점,그러나 확장 없다.이러한만 처리할 수 있 제공하는 경우에는 연장이트: ListFindNoCase(FileExt, "doc,xls,ppt,jpg").하려는 경우 계정에 대한 이 모든,당신은 아마도 사임하 reguar expression:

<cfset FileExtRe = "(?:\.(?:doc|xls|ppt|jpg))?$">
<cfset FileName  = REReplaceNoCase(FileExtRe, FileFullName, "")>

분할 파일의 이름에서 경로,ColdFusion 제공하는 고유한 기능을 하는 또한 처리 플랫폼의 차이: GetFileFromPath()GetDirectoryFromPath()

다른 팁

Tomalak의 대답은 좋지만 이것은 까다로울 수 있습니다. "mydoc.ver1.doc"(유효한 Windows 파일 이름)라는 파일이 주어지면 Filename이며 어떤 확장자입니까? Filepath가 있으면 어떻게됩니까?

그러나 이러한 시나리오에서도 목록 기능을 유리하게 활용할 수 있습니다.

경로에서 파일을 쉽게 구문 분석 할 수 있습니다.

fullFileName=listLast(fieldname,"\/")

파일 이름이 점 앞에있는 모든 것이라고 가정하면

theFileName=listFirst(fullFileName,".") 

작동합니다.

마지막 기간 이후의 모든 것을 얻지 않으려면 약간의 속임수가 필요하지만 그다지 많지는 않습니다. A가 없습니다 listAllButLast() 기능 (그런 것이 cflib.org에 존재할 수 있지만) 그러나 당신이 따르는 것을 얻기 위해 생각할 수있는 두 가지 방법이 있습니다.

fileName=reverse(listRest(reverse(fullFileName),"."))

또는

fileName=listDeleteAt(fullFileName,listLen(fullFileName,"."),".")

그러나 Tomalak의 제안과 마찬가지로 이것은 확장이없는 파일 이름으로 분류됩니다. 이것을 a <cfif listLen(fullFileName,".") GT 1> 그것을 설명합니다.

현재 허용 솔루션을 작동하지 않는 파일에 포함되지 않은 확장자.

를 해결할 수 있을 사용하여 이 정규 표현식을 지구의 확장자에만 존재하는 경우:

<cfset FileName = rereplace( FullFileName , '\.[^.]+$' , '' ) />


이것은 여전히 완벽하지 않을-당신은 수도에 있는 파일.하지만 그렇지 않으로 간주장이 해결할 수 있거나 사용하여 목록 확장자를 스트립 또는 제한하여 얼마나 확장을 받아들일 것입니다(예:까지 5):

<cfset FileName = rereplace( FullFileName , '\.(jpg|png|gif|bmp)$' , '' ) />
<cfset FileName = rereplace( FullFileName , '\.[^.]{1,5}$' , '' ) />

그래서 먼저 찾아야하는 위치의 마지막 f 을 ls 돕 이(가 될 수 있는 하나 이상 f 을 ls 돕 이에서는 전체 파일명을 사용할 수).나는 생각하지 않 Coldfusion 찾기 작동 기능을 뒤,그 반대의 첫 번째 문자열:

<cfset Position = Find(".", Reverse(FullFileName))>

는 경우에는 반환한 다음 없 f 을 ls 돕 이 파일 이름에 그렇게 적절하게 처리.다른...

<cfset Filename = Left(FullFileName, Len(FullFileName) - Position>

ColdFusion 9+ (아마도 이전에 확인할 수 없지만). 아파치 커먼즈 도서관이 포함되었습니다. 그 안에 org.apache.commons.io.FilenameUtils. CF에 필요한 작업량을 삭감하여 동일한 (또는 유사한) 결과를 얻을 수있는 방법을 활용할 수 있습니다.

filepath = "some/dir/archive.tar.gz";
oUtils = createObject("java", "org.apache.commons.io.FilenameUtils");

writeDump(oUtils.getFullPath(filepath)); // "some/dir/"
writeDump(oUtils.getName(filepath)); // "archive.tar.gz"
writeDump(oUtils.getBaseName(filepath)); // "archive.tar"
writeDump(oUtils.getExtension(filepath)); // "gz"
writeDump(oUtils.getPath(filepath)); // "some/dir/"
writeDump(oUtils.getPathNoEndSeparator(filepath)); // "some/dir"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top