【问题标题】:Create text file to write/add of a couple of images name创建文本文件以写入/添加几个图像名称
【发布时间】:2020-09-02 16:02:22
【问题描述】:

我试图获取一个脚本来创建一个可以写入/添加图像名称的文本文件,但是函数 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")
    }

【问题讨论】:

  • 我强烈建议将流对象用于文件 I/O,因为它更加灵活。 (并在 F1 帮助中有一个示例)

标签: file io dm-script


【解决方案1】:

您的代码几乎没问题,但如果您使用低级 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()

【讨论】:

  • 对于这个 imagedocument(i),我们可以得到 getsize(imagedocument(i), xsize, ysize) 或 getsize(name, xsize, ysize) 的大小,看起来两者都不起作用,谢谢
  • ImageDocumentGetSize(GetImageDocument(i)) 也不起作用
  • @together ImageDocuments 是文件,可以包含多个图像(就像您可以在“页面”上拥有更多图像或作为彼此的注释一样。)当您拥有和imageDocument 时,您需要使用ImageDocumentGetImage( index )获取具体图片。
  • @together 您可能想发布一个关于“如何获取 ImageDocuments 的图像属性”的单独问题,以便我可以发布更完整的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 2013-05-01
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多