[GastForen Archiv Adobe Director Fehlende Dateien abfangen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Archiv - Archivierte Foren
Themen
Beiträge
Moderatoren
Letzter Beitrag

Fehlende Dateien abfangen

danie
Beiträge gesamt: 6

23. Jan 2006, 18:15
Beitrag # 1 von 8
Bewertung:
(5672 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo nochmal,

fast am Ende meines Projektes hab ich jetzt noch eine Frage:
wie fange ich das Fehlen von Dateien (txt, Bilder etc) am Besten ab?
Bis jetzt ist es immer so bei meinem Programm, das Director einfach gar nichts macht, wenn ein Bild fehlt (also ignoriert er das Ganze einfach). Das finde ich aber störend, denn ich hätte eigentlich erwartet, dass er meckert und nicht einfach weiterläuft...!?
Das Gleiche gilt bei Fehlern beim XML-Parsen - gibt es da Standardmethoden, mit denen fehlende Dateien oder in dem Fall TAGS oder ähnliches abgefangen werden?
Grüße und danke
dan
X

Fehlende Dateien abfangen

Batam
Beiträge gesamt: 328

23. Jan 2006, 18:57
Beitrag # 2 von 8
Beitrag ID: #206658
Bewertung:
(5656 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo.

Director ist eben sehr tolerant. Meist helfen Abfragen mit Void oder #empty.

Womit ließt du die Dateien denn ein, BuddyAPI? Oder ein anderes Extra?
Ein paar Infos und der Quellcode dazu wären hilfreich. Ohne diese Infos läßt sich dein Problem nicht eingrenzen.

Die Existenz von Sprites und Membern kannst du mit "type" überprüfen.
-- im aktuellen Frame kein Sprite im abgefragte Kanal:
put sprite (20).type
-- 0
put sprite (20).member --alternativ
-- (member 0 of castLib 0)

-- kein Member auf Platz 30 im Cast 1:
put member(30,1 ).type
-- #empty

-- wenn ein Member vorhanden ist bekommst du den Typ angezeigt:
put member(30,1 ).type
-- #bitmap

Damit kannst du eine If-Abfrage konstruieren.
Ein Beispiel mit Quellcode findest du in der Hilfe.

mfg, Batam


als Antwort auf: [#206654]

Fehlende Dateien abfangen

danie
Beiträge gesamt: 6

24. Jan 2006, 13:06
Beitrag # 3 von 8
Beitrag ID: #206773
Bewertung:
(5649 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

also ich habe 2 verschiedene Prinzipien, die ich abfangen muss.
Einmal lese ich über das fileio-xtra ne datei ein und speicher die dann in ne variable:

set myFile = new(xtra "fileio")
myFile.openfile("irgendwas.txt",1)
set theFile = readFile(myFile)

jetzt der Versuch, abzufangen:

if theFile = VOID then
go to marker ("Falsch")
_movie.halt()
end if

--> Da springt er auch rein, wenn die Datei nicht da ist, aber er springt nicht an den Marker (den ich 100mal kontrolliert habe). Das Ganze passiert in "on prepareMovie" - kann ich da vielleicht noch nicht an andere STellen springen? Und .halt() klappt halt auch nicht. Er soll das Programm anhalten, aber NICHT schließen..!!

Die andere Sache ist die, verschiedene Bilder in ein und denselben member zu laden.
Das sieht wie folgt aus:

bild1 = xml.child[1].child[6].attributeValue[1]
--> Da ist in XML das Bild gespeichert, klappt auch soweit

und jetzt:
member("Bild").filename = the moviepath&bild1

--> und hier möchte ich halt abfangen, ob das Bild auch da ist. Das Problem ist, dass er aber anscheinend auf jeden Fall den Pfad setzt, egal, ob da ein Bild ist oder nicht...!?
Welche methode muss ich den sonst nehmen?
ICh hab noch von member("Bild").importFileInto(bild) gelesen, aber das klappt gar nicht... !?
Grüße
dan


als Antwort auf: [#206658]

Fehlende Dateien abfangen

Batam
Beiträge gesamt: 328

24. Jan 2006, 18:49
Beitrag # 4 von 8
Beitrag ID: #206858
Bewertung:
(5645 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi.

Für deine Probleme mit "halt()" und "go" in "on prepareMovie" gilt RTFM. Du weißt ja sicher was das bedeutet.

Zitate aus der Hilfe:

-- halt()
Diese Filmmethode beendet die aktuelle Prozedur und jede andere Prozedur, von der sie aufgerufen wurde, und hält während der Erstellung den Film an bzw. ---->>>>beendet einen laufenden Projektor<<<<-----.

-- go
Die Befehle go, play und updateStage sind in einer on prepareMovie-Prozedur deaktiviert.

--------------------------------------------------------------------------

--du kannst dir merken ob das Dateieinlesen geklapt hat z. B. mit einer globalen Variablen.
--Schreib ein
gFileOK = true
--vor "set myFile = new(xtra "fileio")"

--und nach "set theFile = readFile(myFile)"
if theFile = VOID then
gFileOK = false
end if

--In dein erstes Frame legst du dann ein Verhalten mit
if gFileOK = false then
go to marker ("Falsch")
end if

Um den Film anzuhalten mußt du wie üblich "go to the frame" benutzen in einem Verhaltesskript. Ich vermute diese Art "halt" hast du hier nicht gemeint sondern nur den Ausstieg aus einer Prozedur. Schau dir dazu "exit" an.
-----------------------
Grundsätzlich würde ich aber die Fehlerprüfung anders aufbauen. Bei FileIO gibt es dazu die Statusabfrage.
Wenn es nur darum geht, einen Text auszutauschen, dann würde ich einen internen Textmember erstellen und einfach nur den Inhalt austauschen. Ausserdem ist es besser die Funktion aus prepareMovie auszulagern. Dadurch kannst du sie auch zur Laufzeit immer wieder aufrufen.

Code
global  gFileOK 

on prepareMovie
----
txtEinlesen
--Alle weiteren Aufgabe, in on prepareMovie, die du nicht mehr ausführen willst klammerst du mit:
if gFileOK = true then
-- tu alles andere
end if
---
end prepareMovie

on txtEinlesen
gFileOK = true

myPath = the moviePath
myName = myPath & "irgendwas.txt"
theFile = new (xtra "fileio")
theFile.openFile(myName,0)

-- auf irgendeinen Fehler prüfen, (z.B. falscher Name, nicht vorhanden, ...)
if theFile.status() <> 0 then
gFileOK = false
-- während der Entwicklung Art es Fehlers im Nachrichtenfenster ausgeben
put theFile.error(theFile.status())
end if

-- auf leere Datei prüfen
if gFileOK = true then
if theFile.readFile() = "" then
gFileOK = false
else
member("myText").text = theFile.readFile() -- Dateinhalt in einen Textmember einlesen
end if
end if

theFile.closeFile() -- aufräumen
end

Natürlich kannst du dir den Schritt über den TextMember auch schenken, wenn du die Daten sofort verwendest und den Dateiinhalt nicht sehen willst.
---------------------------------------------------------------------------------------------

-- member("Bild").filename = the moviepath & bild1
Was bekommst du bei
put the moviepath & bild1
Stimmen hier der Weg zum Bild und der Name des Bildes incl. Extension?

Tipp: Schau dir mal "getNthFileNameInFolder()" an.

mfg, Batam


als Antwort auf: [#206773]

Fehlende Dateien abfangen

danie
Beiträge gesamt: 6

25. Jan 2006, 11:16
Beitrag # 5 von 8
Beitrag ID: #206940
Bewertung:
(5640 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo batam,

danke für die ganzen Tipps, das Meiste hab ich auch schon hingekriegt. Nur die Sache mit dem .filename macht mir Sorgen.
Wenn ich hinterher das Ganze per "put" mir ausgeben lassen, dann hat er den Pfad gesetzt, auch wenn es da gar keine Datei gibt...!?
Kann man nicht vorher abfragen, ob die Datei überhaupt existiert?

Grüße
dan


als Antwort auf: [#206858]

Fehlende Dateien abfangen

Batam
Beiträge gesamt: 328

25. Jan 2006, 13:03
Beitrag # 6 von 8
Beitrag ID: #206983
Bewertung:
(5632 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo.

Wenn du mit "the moviepath&bild1" einen ganzen Pfad reinsteckst, dann kommt eben auch ein ganzer Pfad heraus.
Director überprüft von sich aus nicht ob deine Pfadangaben stimmen. Erst wenn versucht wird auf die Datei zuzugreifen kommt eine Fehlermeldung.

Mach es doch einfach wie bei der Text-Datei oben und überprüfe den Status der Datei.

mfg, Batam


als Antwort auf: [#206940]

Fehlende Dateien abfangen

danie
Beiträge gesamt: 6

26. Jan 2006, 12:47
Beitrag # 7 von 8
Beitrag ID: #207215
Bewertung:
(5618 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo nochmal,

also das hab ich glaub ich nicht richtig verstanden.
Wie prüfe ich denn bei einem member den Status, den das Bild hat, dessen Pfad ich ihm zuweise?
Oder soll ich das Bild vorher zwischenladen?
mfg
danie


als Antwort auf: [#206983]

Fehlende Dateien abfangen

Batam
Beiträge gesamt: 328

26. Jan 2006, 17:40
Beitrag # 8 von 8
Beitrag ID: #207317
Bewertung:
(5612 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja. OpenFile dann Status prüfen, genau wie oben.

Alternativ dazu kannst du auch mit "getNthFileNameInFolder()" eine Liste der vorhandenen Dateien in einem bestimmten Ordner anlegen und diese Liste mit dem Wert in der Variablen "bild1" abgleichen. Wird der Wert in der Liste gefunden, dann ist das Bild vorhanden und wenn nicht, dann nicht.

Damit hast du schon zwei Möglichkeiten die Existenz einer Datei zu überprüfen. Eine weitere Möglichkeit bietet FileExists von dem Xtra Buddy API.

mfg, Batam


als Antwort auf: [#207215]
(Dieser Beitrag wurde von Batam am 26. Jan 2006, 17:45 geändert)
X