Как проверить, сохранен ли открытый файл на диске - скрипт CS6 - PullRequest
1 голос
/ 24 января 2020

Я хочу написать функцию, которая создает массив файлов из открытых документов, которые расположены в любом месте на жестком диске. Я не хочу файлы в этом массиве, которые нигде не сохраняются. Другими словами документы, такие как: файл-> новый-> создать какой-либо файл-> не сохранять этот файл в любом месте. Пока я создал этот код:

var docsExistingOnDrive = filteringOpenedDocs();

alert(docsExistingOnDrive);

function filteringOpenedDocs() {

  var imageTypes = [
  /.png$/,
  /.psd$/,
  /.jpg$/,
  /.tif$/,
  /.bmp$/,
  /.gif$/,
  ];

  var openedDocsToProcess = new Array;

  for (var i = 0; i < app.documents.length; i++) {
      for ( var j = 0 ; j < imageTypes.length; j++ ) {
          if ( app.documents[i].name.match(imageTypes[j]) ) {
              openedDocsToProcess.push(app.documents[i]);
          };
      }
  }

  return openedDocsToProcess;
}

Я заметил, что документы еще не сохранены, не имеют расширений (png., psd. et c.) В имени. Поэтому я использовал это свойство для фильтрации файлов. Но я также обнаружил ошибку в сценарии, когда пользователь может создать имя файла ( новый документ ) с расширениями (png., psd. et c.). Который в результате я получаю ложный положительный результат в состоянии if (app.documents[i].name.match(imageTypes[j]). Затем он добавляет файл, который не сохраняется нигде на диске, в массив openedDocsToProcess.

==================== ================================================== ====

Примечания: Вместо использования if ( app.documents[i].name.match(imageTypes[j]) условие: 1. Я пытался использовать метод exists в -> if (app.documents[i].exists), но app.documents[i].exists всегда дает undefined 2. Я пытался использовать метод path в -> app.documents[i].path !== null, но затем я получаю « error 8103 » ниже, и сценарий прекращается. enter image description here Заранее спасибо.

1 Ответ

1 голос
/ 24 января 2020

app.documents возвращает массив объектов Document .

Этот объект уже имеет изящное свойство для вашего варианта использования: fullName

Если файл не сохранено где-нибудь на жестком диске, но это свойство не имеет значения. К сожалению, однако, если вы попытаетесь извлечь его из несохраненного документа, вы получите всплывающее окно с сообщением об ошибке - по существу, завершив сценарий.

Чтобы обойти это, вы можете обернуть извлечение fullName внутри try-catch заблокировать и просто добавить документы в массив openedDocsToProcess, если попытка не удалась.

var openedDocsToProcess = new Array;
var failed=false;
var temp;
for (var i = 0; i < app.documents.length; i++) 
{
    try 
    {
        failed=false;
        temp=app.documents[i].fullName;
    }
    catch(e)
    {
        failed=true;
    }
    if(!failed)
    {
        openedDocsToProcess.push(app.documents[i]);
    }
}
alert(openedDocsToProcess);
...