设置高超时实际上并不验证文件写入完成。它只是允许代码运行更长时间。此外,仅仅能够读取文件并不意味着它也被写入。您需要做的是观察文件大小的变化。但是在获取文件信息时必须注意不要造成阻塞情况。尝试在不创建非阻塞读取的情况下读取文件可能会中断文件写入并导致其失败。这可以使用以下代码来完成。
给定一个文件,代码将一直运行,直到文件被写入且未被锁定。这段代码已经有几年的历史了,但你应该明白了。
<cffunction name="isFileWritten" access="public" returntype="string">
<cfargument name="source" type="struct" required="yes"/>
<cfscript>
thisFile = source;
fileRead = createObject("java", "java.io.FileInputStream");
thisThread = CreateObject("java", "java.lang.Thread");
loopCT = 1;
while(1 EQ 1)
{
try
{
fileRead.init(thisFile);
break;
}
catch(any ecpt)
{
thisThread.sleep(1000);
}
incrementValue(loopCT);
if(loopCT GT 60)
{
fileRead.close();
return;
}
}
loopCT = 1;
while(1 EQ 1)
{
sizeA = fileRead.available();
thisThread.sleep(1000);
sizeB = fileRead.available();
if(sizeA EQ sizeB)
{
thisThread.sleep(1000);
sizeC = fileRead.available();
if(sizeC EQ sizeB)
{
break;
}
}
incrementValue(loopCT);
if(loopCT GT 60)
{
fileRead.close();
return;
}
}
fileRead.close();
</cfscript>
<cfreturn>