別ボリュームにあるドキュメントがjavascriptでうまく開かない

[5316]別ボリュームにあるドキュメントがjavascriptでうまく開かない | 投稿者:orlab | 投稿日:2010/11/15(Mon) 21:07:36
Mac OS 10.4.11 InDesign CS3
Javascript

スクリプト初心者です。初歩的な質問かもしれませんがよろしくお願いします。

最近過去データを参照できるように、PDFを自動で書き出してくれるスクリプトを、いろいろな方が公開しておられるものを参考に作成したのですが、いざ実行してみるとドキュメントを開く段階で「ファイル(フォルダ)が見つかりません」というエラーが出てしまい頭を悩ませております。

私の環境では、AにOS、Bに作業データというようにパーティションを切っているのですが、B側のinddファイルを開こうとした場合のみ、そのようにエラーが出てしまいます。

パスの表記が特殊なのか、またはそもそも別のボリュームのデータはjavascriptでは読み込めないのでしょうか?

単純にA側のボリュームにデータを移動してからスクリプトを走らせれば良い話なのですが、後学のためにご教授いただければ幸いです。

よろしくお願いいたします。


folderObj = Folder.selectDialog();
saveFolder = Folder.selectDialog();
fileList = folderObj.getFiles("*.indd");
for (i=0; i<fileList.length; i++){
   fileObj = new File(fileList[i]);
   app.open(File(fileObj));←←←ここでエラー
   Name = fileList[i].name;
   newName = Name.replace(/indd$/,".pdf");
   pdfPath = saveFolder + "/"+ newName;
   pdfFile = new File(pdfPath);
   app.activeDocument.exportFile(ExportFormat.pdfType, pdfFile, false, "Preset");
   app.activeDocument.close(SaveOptions.no);
}
» 1
[5317]Re: 別ボリュームにあるドキュメントがjavascriptでうまく開かない | 投稿者:PICTRIX | 投稿日:2010/11/15(Mon) 21:29:05
ひょっとして、ですけれど。

fileObj = new File(fileList[i]);
app.open(File(fileObj));←←←ここでエラー

fileObj = の時点でファイルオブジェクトを得ていますよね。
ここでエラー、の部分で再度 File( fileObj ) してます。

??
そもそも fileList[ ] には、ファイルオブジェクトが格納されているんじゃなかったでしたっけ?

あまりにも曖昧でごめんなさい。
» 2
一応動くようですが、フォルダに全角()使ってたりするとかしているとエラーになりますね。

ExtendScript Toolkitを使っているなら
$.writeln(fileObj)やalert(fileObj)などをエラーの前にかませて原因を確かめるのがいいかと思います。
» 3
ご返答ありがとうございます。
路頭に迷っているので多少のことでもご指摘いただけると大変うれしいです。

>PICTRIX様
ファイルオブジェクトが二重・三重に設定されている状態、ということでしょうか。
問題の箇所を下のように修正したところ、たしかに修正前と同じように動きました。javascriptについての知識が浅くお恥ずかしい限りです。ご指摘ありがとうございます。

for (i=0; i<fileList.length; i++){
   fileObj = fileList[i];    
   alert(fileObj);
   Name = fileList[i].name;

しかし、やはり別ボリュームのファイルについては開けないようです...


>mg様
>>一応動くようですが、フォルダに全角()使ってたりするとかしているとエラーになりますね。

ちょっと不思議なのですが、こちらではOSと同じボリュームにある場合には日本語や全角括弧が使われていても正常に動作するので、なにか環境の違いによるものかもしれません。


>>$.writeln(fileObj)やalert(fileObj)などをエラーの前にかませて原因を確かめるのがいいかと思います。

申し訳ありません、$.writeln(fileObj)については使い方がよく分かりませんでした...。どういった内容のコードなのかご教授いただけると幸いです。

alert(fileObj)については何度かかませてみました。3パターン検証をしてみましたので結果を書き出してみます。

まず正常に動作する場合です。
OSと同一ボリュームのデスクトップに置いたsample.inddを対象にスクリプトを走らせた場合、正常にPDFを生成できます。
そのときalertが吐き出したfileObjは「~/Desktop/sample.indd」でした。

次に、エラーになってしまうパターンです。
別ボリュームである「MacintoshHD_data」直下のsample.inddにスクリプトを走らせてみると、問題の箇所でエラーが起きます。
そのときalertが吐き出したfileObjは「/MacintoshHD_data/sample.indd」で、
「ファイルが存在しないか、ファイルへのアクセス権がないか、または別のアプリケーションで使用されている可能性があります。」というエラーが出てしまいます。
調べていて気づいたのですが、これはボリューム直下ではフォルダ選択ダイアログがうまく機能しないというだけことかもしれません。

三つ目のパターンもエラーが起きます。
「MacintoshHD_data」直下ではなく、一つフォルダを挟んでスクリプトを走らせるとエラーは出ますが二つ目のパターンとはエラー内容が変わります。例えば「aaa」というフォルダの下にsample.inddを置くと
alertは「/MacintoshHD_data/aaa/sample.indd」で、
エラー内容は「フォルダ"/MacintoshHD_data/aaa/sample.indd"が見つかりません。」というものになります。

エラー内容を見るとドキュメントへのパスは間違っていないようにも思えるのですが、よく分かりません。
存在していないではなく、見つかりませんというエラー内容も解せないのですが、やはり別ボリュームのドキュメントへのアクセスには特殊なパスが必要なのでしょうか?

長文になってしまい申し訳ありません。みなさまの知識をおかしいただければ幸いです。

(検証に使用したスクリプト)
folderObj = Folder.selectDialog();
saveFolder = Folder.selectDialog();
fileList = folderObj.getFiles("*.indd");
for (i=0; i<fileList.length; i++){
   fileObj = fileList[i];    
   alert(fileObj);
   app.open(fileObj);←←←ここでエラー
   Name = fileList[i].name;
   newName = Name.replace(/indd$/,".pdf");
   pdfPath = saveFolder + "/"+ newName;
   pdfFile = new File(pdfPath);
   app.activeDocument.exportFile(ExportFormat.pdfType, pdfFile, false, "Preset");
   app.activeDocument.close(SaveOptions.no);
}
» 4
フォルダに全角括弧が使われていると、内部的に半角に自動変換されて、fileListの取得に失敗するんですが

fileList = folderObj.getFiles("*.indd");
alert(fileList)//←からっぽのアラート

なのでapp.open(fileObj); では開くべきものがないのでエラーになるはずなんですが、エラーというより開くものがなくて正常終了するはずなんですがおかしいですね。

別ボリュームのアクセス権の問題の気がしますが、読み書きできてますか?
» 5
[5324]Re: 別ボリュームにあるドキュメントがjavascriptでうまく開かない | 投稿者:PICTRIX | 投稿日:2010/11/17(Wed) 14:44:11
ちなみに先のファイルオブジェクト云々は、自作のJSが不具合を起こしたことが有りましたので、もしやと思いまして。

orlabさんの「検証に使用したスクリプト」で試してみましたが、当方では別HDDに有っても開きました。(フォルダ内しか試していませんが)
OS 10.4.11  IDcs3 5.0.4

mgさんの
>別ボリュームのアクセス権の問題の気がしますが、読み書きできてますか?
っぽい気がしますが。
» 6
お返事が遅くなりまして申し訳ありません。
しばらくスクリプトを検証している時間がありませんでした。
現状は変わらず、やはり別ボリュームにあるファイルは開けないままです。


>mg様

>>フォルダに全角括弧が使われていると、内部的に半角に自動変換されて、fileListの取得に失敗するんですが...

「フォルダ」を「ファイル」と勘違いしておりました。
私の方でも「フォルダ」に全角括弧がある場合は確かに正常終了しました。
こちらの勘違いでお手間かけさせてしまい申し訳ありません。
それにしても全角の括弧のみエラーになるとは、不思議ですね。


>>別ボリュームのアクセス権の問題の気がしますが、読み書きできてますか?

アクセス権は問題ないように思います。
対象ファイル(「sample.indd」)の情報を見ても権限は「読み/書き」と出ておりますし、ファイルのダブルクリックでも問題なく開いて保存も可能です。



>PICTRIX様

>>orlabさんの「検証に使用したスクリプト」で試してみましたが、当方では別HDDに有っても開きました。

わざわざ検証していただき、ありがとうございます。
別HDDにあっても動くということであれば、すこし希望が持てそうです。
もし差し支えなければそのときに「alert(fileObj);」が書き出した文字列がどのような形だったかお教えいただきたいのですが、よろしいでしょうか?
パーティションを切った同一HDD内のデータへのアクセスと同一ではないと思いますが、参考にできれば...と思います。

ただ、PICTRIX様の検証で可能であったことから
スクリプト自体ではなくアクセス権のような外部が原因という疑いが濃くなってきたように思いますが、私にはちょっと想像がつきません...
アクセス権以外に、このような弊害を生む要因はあるのでしょうか?




ちなみに検証に使用したスクリプトですが、
InDesignのスクリプトパネルから走らせた場合は問題なくても
ExtendScript Toolkit 2のデバッグモードでは、同じ対象ファイルでも「app.open(fileObj);」の部分で引っかかってしまいます。
エラー内容は「app.openが関数ではありません」というものです。

今回の件と関係があるのか分かりませんが、これはExtendScript Toolkit 2側のバグと考えてよいのでしょうか?


またしても長文で申し訳ありません。
なにとぞ、よろしくお願いいたします。
» 7
[5352]Re: 別ボリュームにあるドキュメントがjavascriptでうまく開かない | 投稿者:PICTRIX | 投稿日:2010/11/24(Wed) 18:47:32
「ID_OpenTest」というフォルダ内に「id_a.indd / id_b.indd」の2つのドキュメントを入れました。

Data2 と言うHDDにそのフォルダを入れて実行した結果は
「/Data2/ID_OpenTest/id_a.indd」と「/Data2/ID_OpenTest/id_b.indd」です。

Macintosh HD2 と言うHDDにそのフォルダを入れて実行した結果は
「/Macintosh%20HD2/ID_OpenTest/id_a.indd」と「/Macintosh%20HD2/ID_OpenTest/id_b.indd」です。

アプリケーションは「Macintosh HD」に有り、デスクトップに作成した「名称未設定フォルダ」を保存先として実行し、PDFが作成されました。

何でしょうね???
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)