Connect failed: Connection timed out

[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt InDesign CS5: openDlg() löscht ausgewählte Datei

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

InDesign CS5: openDlg() löscht ausgewählte Datei

Martin Fischer
  
Beiträge gesamt: 12779

2. Mär 2011, 08:08
Beitrag # 1 von 15
Bewertung:
(6286 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

innerhalb eines Skripts soll mit folgendem Code per 'Datei öffnen'-Dialog eine Datei ausgewählt werden.

Code
var f = new File; 
var s_file = f.openDlg('Datei auswählen!');


Dies funktioniert prima in CS3 und CS4.
Aber in CS5 wird die Datei nicht nur ausgewählt, sondern mit dem Schließen des Dialogs auch gleich gelöscht.
Sie ist hinterher nirgends mehr zu finden. Nicht im Papierkorb und nicht in der Adobe InDesign CS5.app.
Wie gut, dass es die TimeMachine gibt. ;-)

Passiert das auch bei anderen Anwendern?
Hat jemand eine Idee, was da passiert und wie dem entgegenzuwirken wäre?
Gibt es eine Alternative zur Auswahl einer Datei per Dialog?
Ja, vielleicht geht es über getFiles() und einem eigenen Auswahldialog.


Ich sehe gerade, in Photoshop CS5 ist dieses Problem auch bekannt:
CS5 bug? File is deleted when attempting to open!

-------------
OS X 10.6.6 (Snowleopard)
InDesign CS5 7.0.3
iMac Dual 3.06 GHz, 4 GB 800 MHz DDR2 SDRAM

(Dieser Beitrag wurde von Martin Fischer am 2. Mär 2011, 08:23 geändert)
X

InDesign CS5: openDlg() löscht ausgewählte Datei

flobuc
Beiträge gesamt: 246

2. Mär 2011, 08:34
Beitrag # 2 von 15
Beitrag ID: #466069
Bewertung:
(6271 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

kann den Bug unter Mac OS X 10.6.6 mit ID 7.0.3 bestätigen.
Aber der Fehler tritt nicht unter Windows auf (Win 7 SP1, ID 7.0.3).

Gruss

Flo


als Antwort auf: [#466064]

InDesign CS5: openDlg() löscht ausgewählte Datei

Gerald Singelmann
  
Beiträge gesamt: 6269

2. Mär 2011, 08:41
Beitrag # 3 von 15
Beitrag ID: #466070
Bewertung:
(6270 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

ich kann das Phänomen nachvollziehen. Ich sehe es aber nicht als Problem an, da du die Funktion nicht sinnvoll (soll heißen: wie geplant) einsetzt.

openDlg ist die Instanz-Methode zum Öffnen. Die macht nur Sinn, wenn du vorher ein File-Objekt richtig instanziiert hast. Also
var f = new File("~/Desktop/bild.png");
und nicht nur
var f = new File();

openDlg ist also dafür gedacht, den Pfad zur Datei vorzugeben. Wenn du das nicht willst, nimm die Klassen-Methode File.openDialog(). Also
var f = File.openDialog("Ich weiß nicht, wo die liegt");

In beiden vorgeschlagenen Varianten verschwindet die Datei bei mir nicht.


als Antwort auf: [#466064]

InDesign CS5: openDlg() löscht ausgewählte Datei

WernerPerplies
Beiträge gesamt: 2760

2. Mär 2011, 08:53
Beitrag # 4 von 15
Beitrag ID: #466072
Bewertung:
(6259 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Flo,

nur mal aus Neugier:

Ist die Datei unter Windows unverändert, oder hat sie vielleicht die Länge 0?


als Antwort auf: [#466069]

InDesign CS5: openDlg() löscht ausgewählte Datei

flobuc
Beiträge gesamt: 246

2. Mär 2011, 08:57
Beitrag # 5 von 15
Beitrag ID: #466074
Bewertung:
(6250 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

Datei ist unter Windows unverändert.

Flo


als Antwort auf: [#466072]

InDesign CS5: openDlg() löscht ausgewählte Datei

WernerPerplies
Beiträge gesamt: 2760

2. Mär 2011, 09:01
Beitrag # 6 von 15
Beitrag ID: #466075
Bewertung:
(6246 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke,

denn die Folge
var f = new File;
var s_file = f.openDlg('Datei auswählen!');
hätte auch in einem
CreateFile mit selektiertem Namen enden können.

Dann wäre die Länge 0 gewesen.


als Antwort auf: [#466074]

InDesign CS5: openDlg() löscht ausgewählte Datei

Martin Fischer
  
Beiträge gesamt: 12779

2. Mär 2011, 09:17
Beitrag # 7 von 15
Beitrag ID: #466079
Bewertung:
(6234 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald,

Du hast Recht.
Demnach verhält sich InDesign CS5 in diesem Punkt konsequenter als die Vorgängerversionen und bestraft den Fehler eines Skripters erbarmungslos.

File.openDialog() macht das, was ich mir wünsche.
Danke.


als Antwort auf: [#466070]
(Dieser Beitrag wurde von Martin Fischer am 2. Mär 2011, 09:18 geändert)

InDesign CS5: openDlg() löscht ausgewählte Datei

Gerald Singelmann
  
Beiträge gesamt: 6269

2. Mär 2011, 09:55
Beitrag # 8 von 15
Beitrag ID: #466097
Bewertung:
(6224 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat konsequenter

hmmm, ein gemeiner Bug ist es schon. Lediglich der Workaround ist einfach.


als Antwort auf: [#466079]

InDesign CS5: openDlg() löscht ausgewählte Datei

Martin Fischer
  
Beiträge gesamt: 12779

2. Mär 2011, 15:41
Beitrag # 9 von 15
Beitrag ID: #466139
Bewertung:
(6187 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Gerald ] Lediglich der Workaround ist einfach.


Wenn wir gerade bei Dialogen und Workarounds um sie herum sind ...

Ich sehe es doch richtig, dass dem File.saveDialog (prompt[, preset]) kein Dateiname als Vorgabe mitgegeben werden kann, sondern – im erweiterten Fall – lediglich prompt und preset.

Weiß jemand eine Möglichkeit, den 'Sichern unter'-Dialog, wie er auf der Benutzeroberfläche erscheint, nachzubilden? Der File.saveDialog() bietet alles, was ich für einen bestimmten Zweck brauche; es fehlt nur der vorgegebene Dateiname (aus dem aktiven Dokument zu ermitteln bzw. neu zuzuweisen).


als Antwort auf: [#466097]

InDesign CS5: openDlg() löscht ausgewählte Datei

Gerald Singelmann
  
Beiträge gesamt: 6269

2. Mär 2011, 15:56
Beitrag # 10 von 15
Beitrag ID: #466141
Bewertung:
(6181 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ah, hier brauchst du die Methode der Instanz...
Code
var f = new File("~/Desktop/blah.txt"); 
f.saveDlg("Speicher");



als Antwort auf: [#466139]

InDesign CS5: openDlg() löscht ausgewählte Datei

Martin Fischer
  
Beiträge gesamt: 12779

2. Mär 2011, 16:22
Beitrag # 11 von 15
Beitrag ID: #466142
Bewertung:
(6172 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ausgezeichnet!

Das vervollständigte Codeschnippsel, das den 'Sichern unter'-Dialog des aktiven Dokuments nachbildet, sieht demnach so aus:

Code
// save to 
if (app.documents.length >0)
{
var f = new File(app.documents.firstItem().fullName);
var n_f = f.saveDlg();
if (n_f != null)
app.documents.firstItem().save(n_f);
}



als Antwort auf: [#466141]

InDesign CS5: openDlg() löscht ausgewählte Datei

Gerald Singelmann
  
Beiträge gesamt: 6269

2. Mär 2011, 16:34
Beitrag # 12 von 15
Beitrag ID: #466143
Bewertung:
(6167 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Code
app.documents.firstItem() 


Was ich immer schon mal fragen wollte...
Was hast du gegen app.activeDocument? Dass das erste in der Liste auch das aktive ist, ist doch eher Zufall als semantisch untermauert...


als Antwort auf: [#466142]

InDesign CS5: openDlg() löscht ausgewählte Datei

Martin Fischer
  
Beiträge gesamt: 12779

2. Mär 2011, 17:02
Beitrag # 13 von 15
Beitrag ID: #466145
Bewertung:
(6160 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Was hast du gegen app.activeDocument?


Ich nehm's teils als Alternative zu app.documents[0], um den Unterschied einer Collection zu einem Array zu unterstreichen, und teils aus Gewohnheit analog zu insertionPoints.firstItem() u.a.

Bis zu CS5 ist nach meinen Erfahrungen app.documents.firstItem() auch stets das aktive Dokument. Und bis mich eine gegenteilige Erfahrung nicht auf die Nase fallen lässt, werde ich diese schlechte Angewohnheit wohl auch beibehalten. ;-)

Außerdem bietet mein Textexpander den Textbaustein '.ffi' = 'firstItem()' (damit ich hier Tippfehler vermeide). Und ich war bislang zu faul, ihn mit 'aad' = 'app.activeDocument' zu bestücken – allerdings könnte ich wohl 'dd =' umbelegen. ;-)


Im Prinzip hast Du ja Recht.

Andererseits ist aber documents.firstItem() näher an documents.item(0) (z.B. für eine Schleife) als activeDocument.

Ach, was soll's mit diesen Verteidigungsreden!
Ich glaub's mir ja selbst nicht mehr.
Von heute an ändere ich meine Gewohnheit.


als Antwort auf: [#466143]

InDesign CS5: openDlg() löscht ausgewählte Datei

Gerald Singelmann
  
Beiträge gesamt: 6269

2. Mär 2011, 17:52
Beitrag # 14 von 15
Beitrag ID: #466147
Bewertung:
(6141 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Von heute an ändere ich meine Gewohnheit.

So war das doch gar nicht gemeint... Ich dachte nur, ich überseh was.


als Antwort auf: [#466145]

InDesign CS5: openDlg() löscht ausgewählte Datei

Dirk Becker
Beiträge gesamt: 193

6. Mär 2011, 13:28
Beitrag # 15 von 15
Beitrag ID: #466358
Bewertung:
(5963 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
app.activeDocument gibt es nicht auf InDesign Server. Der Zugriff über die documents ist da die Alternative, wenn man sich nicht das in Arbeit befindliche Dokument in einer eigenen Variablen merken mag.

Ob man jetzt documents.item(0) oder firstItem() verwendet ist Geschmackssache. firstItem() ist potentiell ein paar CPU Takte schneller, weil JavaScript ein Argument weniger transportieren muss.

Zugriff auf Collections über eckige Klammern funktioniert zwar auch, aber durch die item.. Funktionen verdeutlicht man sich besser, dass hier die JavaScript Engine mit InDesign kommunizieren muss. Richtige Arrays werden quasi intern behandelt und sind bei mehrfachem Zugriff schneller, zumindest wenn man sie zwischenspeichert.

Gruß,
Dirk


als Antwort auf: [#466147]
X