创建一个文本文件来写入/添加几个图像的名称



我试图获得一个脚本来创建一个可以写入/添加图像名称的文本文件,但函数FileID = CreateFileForWriting(filename)不起作用,它表明已被其他进程使用我没有得到这个,是这个功能格式不对还是出了什么问题,thx

Number Totaln
totaln=countdocumentwindowsoftype(5)
String filename, text
Number fileID

if (!SaveasDialog( "save text file as",getapplicationdirectory(2,0) + "Imagename.txt", filename))exit(0)

fileID = CreateFileForWriting(filename)

number i
for(i = 0; i <totaln; i++)
{
image imgSRC
imgSRC := GetFrontImage()
string imgname=getname(imgSRC)
WriteFile(fileID,"imgname")
Result("imgname")
}

您的代码几乎是好的,但如果您使用低级别的API进行文件I/O,您需要确保关闭您打开或创建的文件。

你的剧本没有。因此,它正好运行了1次,但在重新运行时(当文件仍然被认为是打开的时(会失败

要修复它,您需要在末尾设置closefile(fileID)

(顺便说一句,如果脚本在打开文件后但在关闭文件之前退出或抛出,则会出现同样的问题。(


但是,我强烈建议不要使用低级API,而是使用文件流对象。它还提供了一个自动文件关闭机制,这样您就不会遇到这个问题。

你在脚本中所做的操作将被写为:

void writeCurrentImageNamesToText()
{
number nDoc = CountImageDocuments()
string filename
if (!SaveasDialog( "save text file as",getapplicationdirectory(2,0) + "Imagename.txt", filename))   return
number fileID = CreateFileForWriting(filename)
object fStream = NewStreamFromFileReference(fileID,1)   // 1 for auto-close file when out of scope
for( number i = 0; i <nDoc; i++ ){

string name = GetImageDocument(i).ImageDocumentGetName()
fStream.StreamWriteAsText( 0, name + "n" ) // 0 = use system encoding for text
}
}
writeCurrentImageNamesToText()

最新更新