:Revision=7
:HTML
<<
128.115
File-Objekt|File
$NoSort
--
Das IP-Objekt File stellt Methoden zur Verfgung um auf Dateien lesend und schreibend zuzugreifen.

Zum Zugriff auf den Inhalt der Dateien (lesend und/oder schreibend) mssen die Dateien einem von 5 Dateipuffern zugewiesen werden. Zum Zugriff selbst wird dann nur noch die Puffernummer benutzt. Dateien werden z.Zt. immer zum Lesen und Schreiben und exklusiv geffnet.

Zum Zugriff auf die Dateien als Ganzes kann ab Rev.2 der Dateiname benutzt werden (siehe unten)

Neu in Revision2:
<ul indent=12>
<li>
<b>erweiterte Dateioperationen:</b><br>
Rename, Copy</li>

<li>
<b>Dateizugriff ohne Nummer, ber Dateiname</b><br>
Dateioperationen, die mit einer nicht geffneten Datei durchgefhrt werden knnen, z.B. Lschen, Umbenennen, Existenz prfen, knnen jetzt auch ber den Dateinamen aufgerufen werden, ohne die Datei zuvor einer Nummer zugeweisen zu haben. 
Die alte Syntax bleibt erhalten, lediglich kann bei diesen Operationen statt der Dateinummer auch direkt der Datename angegeben werden.

Fehlercodes zu diesen Operationen werden ber <!RW>File.Error; (also ohne DateiNummer) ermittelt.

Beispiel:
<!CODE>
// alt:
File.SetFileName (1, 'Test.ini');
File.Delete (1);

// neu:
File.Delete ('Test.ini');
<!TXT>
</li>
</ul>
>>

<<
128.115.1
Funktionen des File-Objekts|Funktionen
--
>>
<<
128.115.1.1
File.Read|Read
--
<!DEF>
function <!TW>File.Read (rFileNr : real; sSeparator : string; rMaximum : real) : string;
<!TXT>
Liest Zeichen aus der Datei <!PW>rFileNr in einen String bis zum ersten Auftreten eines Zeichens, das in <!PW>sSeparator vorkommt, maximal aber <!PW>rMaximum Zeichen. Das Trennzeichen wird nicht zurckgeliefert.

Bei <!PW>rMaximum&lt;=0 wird notfalls bis zum Dateiende gelesen.

Bei <!CW>sTrennzeichen='' werden nAnzahl Zeichen gelesen oder bis das Dateiende erreicht ist.

Die Datei muss geffnet sein.
>>
<<
128.115.1.2
File.ReadLn|ReadLn
--
<!DEF>
function <!TW>File.ReadLn (rFileNr : real) : string;
<!TXT>
Liest Zeichen aus der Datei <!PW>rFileNr in einen String bis zum Zeilenende (CR/LF). Die CR/LF Zeichen werden entfernt.

Die Datei muss geffnet sein.
>>
<<
128.115.1.3
File.Get|Get
--
<!DEF>
function <!TW>File.Get (rFileNr, rCount : real) : vector;
<!TXT>
Liest aus der Datei <!PW>rFileNr <!PW>rCount Bytes oder bis das Dateiende erreicht ist.

Die Datei muss geffnet sein.
>>
<<
128.115.1.4
File.Size|Size
--
<!DEF>
function <!TW>File.Size (rFileNr : real) : real;
<!TXT>
Liefert die Gre der Datei <!PW>rFileNr in Bytes.

Wenn die Datei <!PW>rFileNr nicht geffnet ist, wird -1 geliefert.

<!DEF>
function <!TW>File.Size (sFileName : string) : real;
<!TXT>
Liefert die Gre der Datei mit dem Namen <!PW>sFileName in Bytes.

Wenn die Datei <!PW>sFileName nicht gefunden wird, so wird -1 geliefert.
>>
<<
128.115.1.5
File.Pos|Pos
--
<!DEF>
function <!TW>File.Pos (rFileNr : real) : real;
<!TXT>
Liefert die aktuelle Position des Dateizeigers der Datei <!PW>rFileNr.

Wenn die Datei <!PW>rFileNr nicht geffnet ist, wird -1 geliefert.
>>
<<
128.115.1.6
File.EOF|EOF
--
<!DEF>
function <!TW>File.EOF (rFileNr : real) : real;
<!TXT>
Liefert <!RW>TRUE, wenn der Dateizeigers das Ende der Datei <!PW>rFileNr erreicht hat.

Wenn die Datei <!PW>rFileNr nicht geffnet ist, wird <!RW>TRUE geliefert.
>>
<<
128.115.1.7
File.Exists|Exists
--
<!DEF>
function <!TW>File.Exists (rFileNr : real) : real;
<!TXT>
Liefert <!RW>TRUE, wenn die Datei <!PW>rFileNr existiert.

<!DEF>
function <!TW>File.Exists (sFileName : string) : real;
<!TXT>
Liefert <!RW>TRUE, wenn die Datei mit dem Namen <!PW>sFileName existiert.
>>
<<
128.115.1.8
File.Error|Error
!128.115.204 - Fehlercodes
!128.115.5.1 - Beispiel Datei Schreiben
--
<!DEF>
function <!TW>File.Error (rFileNr : real) : real;
<!TXT>
Liefert das Ergebnis der letzten File-Aktion die sich auf die Datei <!PW>rFileNr bezog.

<!DEF>
function <!TW>File.Error : real;
<!TXT>
Liefert das Ergebnis der letzten File-Aktion, die sich auf eine direkt angegebene Datei bezog.
Der Code ist ein Windows (DOS) Fehlercode!
>>
<<
128.115.1.9
File.Extract|Extract
--
<!DEF>
function <!TW>File.Extract (sFileName : string; rWas : real) : string;
<!TXT>
Liefert einen Teil des bergebenen Dateinames zurck. 

 <!PW>rWas entscheidet, was:<br>
<!STBL>
<!+>Wert<!+>Ergebnis<!>
<!c>0<!>Laufwerk<!>
<!c>1<!>Pfad<!>
<!c>2<!>Dateiname mit Anhang<!>
<!c>3<!>Dateianhang<!>
<!c>4<!>Dateiname ohne Anhang<!>
<!c>5<!>Alles (nur Auflsen der Pfadschablonen)<!>
<!ETBL>

Pfadschablonen werden vor dem Auswerten aufgelst.

Beispiel:
<!CODE>
s:='%IPS%\TEST.IPS';      // EXE in 'D:\MCD_WIN\'
File.Extract (s, 0) -> 'D:\'
File.Extract (s, 1) -> 'D:\MCD_WIN\TYPEDATA\IPSTEPS\'
File.Extract (s, 2) -> 'TEST.IPS'
File.Extract (s, 3) -> '.IPS'
File.Extract (s, 4) -> 'TEST'
File.Extract (s, 5) -> 'D:\MCD_WIN\TYPEDATA\IPSTEPS\TEST.IPS'
<!TXT>
>>

<<
128.115.1.10
File.Execute|Execute
--
<!DEF>
function <!TW>File.Execute (sFile : string; [ sParameter : string; [ rTimeout : real; [ rShowHow : real]]]);
<!TXT>
Fhrt die Datei <!PW>sFile aus. <!PW>sFile sollte eine EXE-Datei sein. bergeben werden die optionalen Parameter in <!PW>sParameter.

 <!PW>rTimeout gibt an, wie lange das System auf das Ende der Anwendung wartet.
<!STBL>
<!+>Wert<!+>Ergebnis<!>
<!c>-1<!>ewig (Default)<!>
<!c>0<!>gar nicht, File.Execute kehrt sofort zurck<!>
<!c>&gt;0<!>Wartezeit in Sekunden<!>
<!ETBL>

 <!PW>rShowHow legt fest, wie die aufgerufene Applikation angezeigt werden soll.
<!STBL>
<!+>Wert<!+>Ergebnis<!>
<!c>0<!>verborgen<!>
<!c>1<!>normal (Default)<!>
<!c>2<!>minimiert (Icon)<!>
<!c>3<!>maximiert (Fullscreen)<!>
<!ETBL>
Die Applikation muss sich nicht unbedingt an diesen Wunsch halten!

Whrend die Applikation ausgefhrt wird, kann das Testprogramm seine Windows-Nachrichten nicht bearbeiten und scheint daher eingefroren zu sein. Dies ist normal und kein Absturz! Wenn dieses Verhalten vermieden werden soll, dann <!RW>File.Process.Start verwenden.

<!STBL>
<tr bgcolor=#f0f0f0 align=center><TD colspan=2><b>Rckgabewerte</b><!>
<TR><TD colspan=2><b>Spezialflle:</b><!>
<TR><TD Align=Center width=20>0<!>Anwendung wurde gestartet. (wenn <!PW>rTimeout=0)<!>
<!c>-1<!>Die Anwendung konnte nicht gestartet werden. Abfrage des Windows-Fehlercodes mit <!RW>File.Error<!>
<!c>-2<!>Die Anwendung wurde gestartet, aber war nach der angegebenen Timeoutzeit noch nicht beendet. Sie luft also noch!<!>
<TR><TD colspan=2><b>Normalfall:</b><br>
Der Rckgabewert der Anwendung (ProcessExitCode). Dieser kann natrlich auch 0, -1 oder -2 sein.<!>
<!ETBL>
>>

<<
128.115.2
Prozeduren des File-Objekts|Prozeduren
--
>>

<<
128.115.2.1
File.Write|Write
!128.115.5.1 - Beispiel Datei Schreiben
--
<!DEF>
procedure <!TW>File.Write (rFileNr : real; sValue : string);
<!TXT>
Schreibt den Wert <!PW>sValue in die Datei <!PW>rFileNr.

Die Datei muss offen sein.
>>

<<
128.115.2.2
File.WriteLn|WriteLn
!128.115.5.1 - Beispiel Datei Schreiben
--
<!DEF>
procedure <!TW>File.WriteLn (rFileNr : real; sValue : string);
<!TXT>
Schreibt den Wert <!PW>sValue in die Datei <!PW>rFileNr und hngt ein CR/LF an.

Die Datei muss offen sein.
>>
<<
128.115.2.3
File.Put|Put
--
<!DEF>
procedure <!TW>File.Put (rFileNr : real; vData : vector);
<!TXT>
Schreibt den Inhalt des Byte-Vectors <!PW>vData in die Datei <!PW>rFileNr.

Die Datei muss offen sein.
>>
<<
128.115.2.4
File.Delete|Delete
!128.115.5.1 - Beispiel Datei Schreiben
--
<!DEF>
procedure <!TW>File.Delete (rFileNr : real);
<!TXT>
Lscht die Datei <!PW>rFileNr. War die Datei offen, so wird sie geschlossen.

<!DEF>
procedure <!TW>File.Delete (sFileName : string);
<!TXT>
Lscht die Datei mit dem Namen <!PW>sFileName. Fr <!PW>sFileName muss der komplette Pfad angegeben werden, Pfadschablonen sind erlaubt.
>>
<<
128.115.2.5
File.Seek|Seek
--
<!DEF>
procedure <!TW>File.Seek (rFileNr, rPosition : real);
<!TXT>
Setzt den Dateizeiger fr Ein-/Ausgaben in der Datei auf die angegebene Position.

Die Datei muss offen sein.
>>
<<
128.115.2.6
File.SetFileName|SetFileName
!128.115.5.1 - Beispiel Datei Schreiben
--
<!DEF>
procedure <!TW>File.SetFileName (rFileNr : real; sFileName : string);
<!TXT>
Weist der Datei <!PW>rFileNr den Dateinamen <!PW>sFileName zu.

Die Datei darf nicht offen sein.
>>
<<
128.115.2.7
File.Open|Open
!128.115.5.1 - Beispiel Datei Schreiben
--
<!DEF>
procedure <!TW>File.Open (rFileNr : real);
<!TXT>
ffnet die Datei <!PW>rFileNr. Falls die Datei nicht existierte, so wird sie erzeugt.

Die Datei darf nicht bereits offen sein.
>>
<<
128.115.2.8
File.Close|Close
!128.115.5.1 - Beispiel Datei Schreiben
--
<!DEF>
procedure <!TW>File.Close (rFileNr);
<!TXT>
Schliet die Datei <!PW>rFileNr. War die Datei bereits geschlossen wird der Aufruf ignoriert.
>>
<<
128.115.2.9
File.Move|Move
--
<!DEF>
procedure <!TW>File.Move (sOld, sNew : string; [ rDoReplace : real]);
<!TXT>
Benennt die Datei oder das Verzeichnis <!PW>sOld in <!PW>sNew um. Die Datei bzw. das Verzeichnis <!PW>sOld muss existieren. Fr <!PW>sOld und <!PW>sNew mssen die kompletten Pfade mit angegeben werden, Pfadschablonen sind erlaubt.

Fr eine Datei darf sich das Ziel auf einem anderen Laufwerk befinden.
Fr ein Verezchnis muss sich das Ziel auf demselben Laufwerk befinden.

Wird <!PW>rDoReplace mit <!RW>TRUE angegeben (Default ist <!RW>FALSE), so wird eine evtl. schon vorhandene Zieldatei mit dem Namen <!PW>sNew berschrieben.
Mit Verzeichnissen ist dies nicht mglich.

(Achtung: Unterschiedlicher Defaultwert zu <!RW>File.Copy!)
>>
<<
128.115.2.10
File.Copy|Copy
--
<!DEF>
procedure <!TW>File.Copy (sOld, sNew : string; [ rDoReplace : real]);
<!TXT>
Kopiert die Datei <!PW>sOld nach <!PW>sNew. Die Datei <!PW>sOld muss existieren. Fr <!PW>sOld und <!PW>sNew mssen die kompletten Pfade mit angegeben werden, Pfadschablonen sind erlaubt.

Wird <!PW>rDoReplace mit <!RW>FALSE angegeben (Default ist <!RW>TRUE), so wird eine evtl. schon vorhandene Zieldatei mit dem Namen <!PW>sNew nicht berschrieben.

(Achtung: Unterschiedlicher Defaultwert zu <!RW>File.Move!)
>>

<<
128.115.3
File.List|List
--
Das List-Unterobjekt erlaubt es, ein Verzeichnis nach Dateien zu durchsuchen.

Die Suche wird mit <!RW>File.List.Find gestartet und mit <!RW>File.List.Next fortgesetzt.

Die gefundenen Dateien knnen mit den weiteren <!RW>File.List-Funktionen ausgewertet werden.
Es ist nicht mglich, Suchlufe zu schachteln.

Beispiel:
Listet alle *.BAK Dateien im IP-Step Verzeichnis auf:
<!CODE>
var
  rFile : real;
step
  rFile := File.List.Find ('%IPS%\*.BAK', 0);
  while (rFile=0) do begin
    Debug.Show (1, str(File.List.Size,6,0,'0'), File.List.Name);
    rFile:=File.List.next;
  end;
  File.List.Close;
end.
<!TXT>
>>
<<
128.115.3.1
File.List.Find|Find
!128.115.3.6 - Attributes
!128.115.3.2
--
<!DEF>
function <!TW>File.List.Find (sPathAndMask : string; rAttribute : real) : real;
<!TXT>
<!PW>sPathAndMask gibt einen Dateipfad und eine Dateimaske an, mit der nach der ersten passenden Datei gesucht wird. Der Pfad kann eine Dateischablone enthalten. Die Maske kann Wildcards (*, ?) enthalten.<br>

<!PW>rAttribute gibt an, welche besonderen Attribute die gesuchte Datei noch haben <b>darf</b>, nicht aber haben <b>muss</b>!<br>

Wird eine Datei gefunden, so wird 0, ansonsten ein Fehlercode zurckgegeben.

Wert in <!PW>rAttribute knnen sein:
<!STBL>
<!+>Wert<!+>Beschreibung<!>
<!c>1<!>Schreibgeschtzte Dateien<!>
<!c>2<!>Versteckte Dateien<!>
<!c>4<!>Systemdateien<!>
<!c>8<!>Laufwerksbezeichner<!>
<!c>16<!>Verzeichnisse<!>
<!c>32<!>Archivdateien<!>
<!ETBL>
Die einzelnen Attributswerte knnen addiert werden.

Archivdateien und schreibgeschtzte Dateien sind auch ohne besonderen Wunsch im Ergebnis enthalten. 
Wirklich effektiv, d.h. das Suchergebnis erweiternd sind  daher nur 2, 4, 8 und 16.

Wurde zuvor eine andere Suche gestartet und nicht mit <!RW>Find.List.Close beendet, so wird ein <!RW>Find.List.Close implizit ausgefhrt!

Beispiel:
<!CODE>
rResult := <!RW>File.List.Find ('%IPS%\*.BAK', 0);
<!TXT>
- findet alle normalen *.BAK Dateien in IPStep Verzeichnis

<!CODE>
rResult := <!RW>File.List.Find ('%IPS%\*.BAK', 2);
<!TXT>
- wie oben, aber inklusive versteckter Dateien

<!CODE>
rResult := <!RW>File.List.Find ('%IPS%\*.*', 16);
<!TXT>
- findet alle Verzeichnisse, aber auch alle anderen Dateien!
- Zum weiteren Filtern siehe File.List.Attribute

Beispiel in <a href="128.115.3">File.List</a>
>>
<<
128.115.3.2
File.List.Next|Next
!128.115.3.1
--
<!DEF>
function <!TW>File.List.Next : real;
<!TXT>
Setzt die letzte, zuvor mit <!RW>File.List.Find gestartete Suche fort. Pfad, Datei- und Attributsmasken sind weiterhin gltig.

Wird eine weitere Datei gefunden, so wird 0, ansonsten ein Fehlercode zurckgegeben.

Beispiel in <a href="128.115.3">File.List</a>

>>
<<
128.115.3.3
File.List.Close|Close
--
<!DEF>
procedure <!TW>File.List.Close;
<!TXT>
Beendet die <!RW>File.List.Find gestartete Suche.

Nach Testende und bei Rest wird automatisch <!RW>File.List.Close aufgerufen.

Bei einem <!RW>File.List.Find oder <!RW>File.List.Next mit negativem Ergebnis (d.h. keine Datei gefunden) wird die Suche automatisch geschlossen.

Nach einem <!RW>File.List.Close sind Zugriffe auf die Datei-Attribute wie Namen, Gre, Flags etc. nicht definiert.
>>
<<
128.115.3.4
File.List.Name|Name
--
<!DEF>
function <!TW>File.List.Name : string;
<!TXT>
Liefert den Dateinamen der zuletzt mit <!RW>Find.List.Find oder <!RW>Find.List.Next gefundenen Datei.

Nur gltig, wenn zuvor eine Datei gefunden wurde.
>>
<<
128.115.3.5
File.List.Path|Path
--
<!DEF>
function <!TW>File.List.Path : string;
<!TXT>
Liefert den Dateipfad der zuletzt mit <!RW>Find.List.Find oder <!RW>Find.List.Next gefundenen Datei.

Nur gltig, wenn zuvor eine Datei gefunden wurde.
>>
<<
128.115.3.6
File.List.Attributes|Attributes
!128.115.3.1 - Find
--
<!DEF>
function <!TW>File.List.Attributes : real;
<!TXT>
Liefert den Dateiattribute der zuletzt mit <!RW>Find.List.Find oder <!RW>Find.List.Next gefundenen Datei.
Der Wert ist eine ODER-Verknpfung der bei <!RW>File.List.Find aufgefhrten Werte.

Nur gltig, wenn zuvor eine Datei gefunden wurde.

Beispiel: Suche nach allen Verzeichnissen:
<!CODE>
var
  rFile : real;
step
  rFile := File.List.Find ('%IPS%\*.BAK', 16);
  // Achtung Maske 16 bedeutet: MIT Verzeichnissen
  // es bedeutet NICHT        : nur Verzeichnisse

  while (rFile=0) do begin
    // jetzt kann eine Datei oder ein Verzeichnis gefunden worden sein!
    // auf den Attribute-Wert filtern
    if (File.List.Attributes & 16)>0 then begin
      // es gibt in jedem Verzeichnis zwei Pseudo-Verzeichnisse:
      // '.' - das aktuelle Verzeichnis
      // '..' - das bergeordnete Verzeichnis
      // diese beiden nicht verwenden
      if (File.List.Name<>'.') and (File.List.Name<>'..') then begin
        Debug.Show (1, File.List.Name);
        // oder sonst etwas damit tun
      end;
    end;
    rFile:=File.List.next;
  end;
  File.List.Close;
end.
<!TXT>
>>
<<
128.115.3.7
File.List.Size|Size
--
<!DEF>
function <!TW>File.List.Size : real;
<!TXT>
Liefert die Dateigre der zuletzt mit <!RW>Find.List.Find oder <!RW>Find.List.Next gefundenen Datei.

Nur gltig, wenn zuvor eine Datei gefunden wurde.
>>
<<
128.115.4
File.Process|Process
--
ber die <!RW>File.Process Befehle kann ein externes Programm gesteuert werden.
<!RW>File.Process ist zwar in der Benutzung umstndlicher als <!RW>File.Execute, aber whrend das externe Programm luft, erhlt der Interpreter Rechenzeit zugeteilt und kann weitere Aktionen durchfhren.

Beispiel fr die Verwendung:
<!CODE>
var
  rTimeout,
  rFinished,
  rTimedOut,
  rPID : real;

step
  rPID:=File.Process.Start ('Programmer.exe /COM=1 /File=Atmel.bin');
  if rPID<>0 then begin
    rTimeout:=DateTime.ReadTimer+120*1000;      // 120 Sekunden Laufzeit max
    repeat
      rTimedOut:=DateTime.ReadTimer>rTimeout;
      rFinished:=File.Process.WaitFor (rPID, 500);      // 500ms auf Ende warten
    until rTimedOut or rFinished or SingleStepContinue;
    if File.Process.IsActive then begin
      File.Process.Kill (rPID);
      // Fehler Prozess wurde nicht fertig
    end
    else begin
      SetValue (File.Process.GetValue (rPID));  // Ergebnis holen
      File.Process.Release (rPID);              // ID freigeben
  end
  else begin
    // Fehler - Start nicht mglich
  end;
end.
<!TXT>
>>
<<
128.115.4.1
File.Process.Start|Process.Start
--
<!DEF>
function <!TW>File.Process.Start (sFile : string; [sPara : string; [rShowHow : real; [sWorkDir : string]]) : real;
<!TXT>
Startet die Datei <!PW>sFile aus. <!PW>sFile sollte eine EXE-Datei sein. bergeben werden die optionalen Parameter in <!PW>sPara.

 <!PW>rShowHow legt fest, wie die aufgerufene Applikation angezeigt werden soll.
<!STBL>
<!+>Wert<!+><b>Ergebnis<!>
<!c>0<!>verborgen<!>
<!c>1<!>normal (Default)<!>
<!c>2<!>minimiert (Icon)<!>
<!c>3<!>maximiert (Fullscreen)<!>
<!ETBL>
Die Applikation muss sich nicht unbedingt an diesen Wunsch halten!

 <!PW>sWorkDir legt das Arbeitsverzeichnis fr den Prozess fest.

Rckgabewerte
<!STBL>
<!><b>Erfolg</b><!>Die ProcessID der Applikation.<br>Die ProcessID wird spter fr die Zustandsabfrage bentigt und sollte daher in einer Variablen gespeichert werden (siehe Beispiel).<!>
<!><b>Nichterfolg</b><!>0, Abfrage des Windows-Fehlercodes mit <!RW>File.Error<!>
<!ETBL>
>>
<<
128.115.4.2
File.Process.IsActive|Process.IsActive
--
<!DEF>
function <!TW>File.Process.IsActive (rPID : real) : real;
<!TXT>
Liefert <!RW>true, wenn die Applikation mit der ProcessID <!PW>rPID noch luft. 
Es knnen nur solche Prozesse abgefragt werden, die durch <!RW>File.Process.Start gestartet wurden.

<!STBL>
<tr bgcolor=#f0f0f0 align=center><TD colspan=3><b>Rckgabewerte</b><!>
<!><!RW>false</TD><TD colspan=2>der Prozess war bekannt und ist beendet<!>
<TR><TD rowspan=4><!RW>true</TD><TD colspan=2>Kein Prozess mit dieser ID, oder Prozess ist beendet,<br> Unterscheidung ber <!RW>File.Error:<!>
<!><!RW>File.Error =-1<!>Diese Prozess-ID ist unbekannt<!> 
<!><!RW>File.Error = 0<!>Dieser Prozess luft noch<!> 
<!><!RW>File.Error &gt; 0<!>Windows Fehlercode<!>
<!ETBL>

Der Aufruf 
<!CODE>
File.Process.IsActive (rPID)
<!TXT>
ist quivalent zu 
<!CODE>
not File.Process.WaitFor (rPID, 0)
<!TXT>
>>
<<
128.115.4.3
File.Process.WaitFor|Process.WaitFor
--
<!DEF>
function <!TW>File.Process.WaitFor (rPID, rWaitTime : real) : real;
<!TXT>
Wartet maximal <!PW>rWaitTime Millisekunden, bis die Applikation mit der ProcessID <!PW>rPID beendet ist. Es knnen nur solche Prozesse abgefragt werden, die durch <!RW>File.Process.Start gestartet wurden.
Das Warten wird ohne Prozessorlast durchgefhrt!

<!STBL>
<tr bgcolor=#f0f0f0 align=center><TD colspan=3><b>Rckgabewerte</b><!>
<!><!RW>true</TD><TD colspan=2>der Prozess war bekannt und ist beendet<!>
<TR><TD rowspan=4><!RW>false</TD><TD colspan=2>Kein Prozess mit dieser ID, oder Prozess ist beendet,<br> Unterscheidung ber <!RW>File.Error:<!>
<!><!RW>File.Error</font> =-1<!>Diese Prozess-ID ist unbekannt<!> 
<!><!RW>File.Error</font> = 0<!>Dieser Prozess luft noch<!> 
<!><!RW>File.Error</font> > 0<!>Windows Fehlercode<!>
<!ETBL>

Der Aufruf 
<!CODE>
File.Process.IsActive (rPID)
<!TXT>
ist quivalent zu 
<!CODE>
not File.Process.WaitFor (rPID, 0)
<!TXT>
>>
<<
128.115.4.4
File.Process.Release|Process.Release
--
<!DEF>
procedure <!TW>File.Process.Release (rPID : real);
<!TXT>
Gibt das ProcessID-Handle fr den Prozess <!PW>rPID an Windows zurck. Dies beeinflusst den Zustand der Applikation selbst nicht! Danach ist der Prozess nicht mehr bekannt und kann nicht mehr abgefragt werden. Ist ein Prozess beendet, oder werden keine Informationen mehr bentigt, so MUSS in jedem Fall <!RW>File.Process.Release mit der ProcessID aufgerufen werden.
Ein Aufruf mit einer unbekannter <!PW>rPID hat keine Auswirkung.

<!CODE>
File.Process.Release (0);
<!TXT>
Gibt alle dem Programm bekannten Processhandles frei.
Kann z.B. in einem Ende-Step oder dem Leave/Reset Step benutzt werden.
>>
<<
128.115.4.5
File.Process.Kill|Process.Kill
--
<!DEF>
function <!TW>File.Process.Kill (rPID : real) : real;
<!TXT>
Beendet die Applikation mit der ProcessID <!PW>rPID gewaltsam. Sollte nur in schwerwiegenden Ausnahmefllen eingesetzt werden, da Resourcen blockiert werden knnen. Fr die <!PW>rPID braucht <!RW>File.Process.Release nicht aufgerufen zu werden. Ein Aufruf mit einer unbekannter <!PW>rPID hat keine Auswirkung.

Rckgabewert:
<!RW>True, wenn die Applikation beendet werden konnte.

<!CODE>
rKilledAll:=File.Process.Kill (0);
<!TXT>
Beendet alle mit <!RW>File.Process.Start gestarteten Applikationen.
Kann z.B. in einem Ende-Step oder dem Leave/Reset Step benutzt werden.

Rckgabewert:
<!RW>True, wenn alle Applikation beendet werden konnten.
>>
<<
128.115.4.6
File.Process.GetValue|Process.GetValue
--
<!DEF>
function <!TW>File.Process.GetValue (rPID : real) : real;
<!TXT>
Liefert den Rckgabecode, den das Programm hinterlassen hat (Fehlercode).

Rckgabewerte:
<!STBL>
<!+>Wert<!+>Bedeutung<!>
<!c>-1<!><!RW>rPID ist nicht bekannt<!>
<!c>-2<!>Fehlercode konnte nicht geholt werden (Abfrage des Windows-Fehlercodes mit <!RW>File.Error)<!>
<!c>sonst<!>der Rckgabecode des Programms<!>
<!ETBL>
>>
<<
128.115.3.8
File.List.Time|Time
--
<!DEF>
function <!TW>File.List.Time : real;
<!TXT>
Liefert Zeit des letzten Schreibzugriffs auf die zuletzt mit <!RW>Find.List.Find oder <!RW>Find.List.Next gefundene Datei.

Standardformat nach ISO8601, ohne Angabe der Zeitzone:
<pre>
'2002-10-14T17.45.56' = 
         14. Oktober 2002, 17 Uhr, 45 Minuten 56 Sekunden, 
</pre>
Das groe T ist der Trenner zwischen Datum und Uhrzeit.
Die angegebene Zeit ist die Zeit, so, wie sie das Betriebssystem liefert. Insbesondere ist zu beachten, dass FAT nur mit einer Auflsung von 2 Sekunden speichert und Windos NT / 2000 die Zeit bezogen auf UTC, Windows 95/98 jedoch als lokale Zeit liefert.

Nur gltig, wenn zuvor eine Datei gefunden wurde.
>>
<<
128.115.204
Fehlercodes
--
<h3>Fehlercodes fr die Arbeit mit Dateipuffern (Zugriff ber Nummern)</h3>
<!STBL>
<!+>Wert<!+>Bedeutung<!>
<!c>0<!>kein Fehler, alles ok<!>
<!c>1<!>Datei war nicht geffnet<!>
<!c>2<!>Datei war geffnet<!>
<!c>3<!>Datei hat noch keinen Namen<!>
<!c>4<!>Datei konnt nicht geffnet werden<!>
<!c>5<!>Datei konnte nicht gelscht werden<!>
<!c>6<!>Ungltige Position in Datei<!>
<!c>7<!>Allgemeiner Stream-Error<!>
<!ETBL>

<h3>Fehlercodes fr die Arbeit mit Dateinamen (Direktzugriff)</h3>
(Die Fehlercodes entsprechen den Windows-Fehlercodes)
<!STBL>
<!+>Wert<!+>Bedeutung<!>
<!c>0<!>SUCCESS<!>
<!c>1<!>ERROR_INVALID_FUNCTION<!>
<!c>2<!>ERROR_FILE_NOT_FOUND<!>
<!c>3<!>ERROR_PATH_NOT_FOUND<!>
<!c>4<!>ERROR_TOO_MANY_OPEN_FILES<!>
<!c>5<!>ERROR_ACCESS_DENIED<!>
<!c>6<!>ERROR_INVALID_HANDLE<!>
<!c>8<!>ERROR_NOT_ENOUGH_MEMORY<!>
<!c>9<!>ERROR_INVALID_BLOCK<!>
<!c>10<!>ERROR_BAD_ENVIRONMENT<!>
<!c>11<!>ERROR_BAD_FORMAT<!>
<!c>12<!>ERROR_INVALID_ACCESS<!>
<!c>13<!>ERROR_INVALID_DATA<!>
<!c>14<!>ERROR_OUTOFMEMORY<!>
<!c>15<!>ERROR_INVALID_DRIVE<!>
<!c>16<!>ERROR_CURRENT_DIRECTORY<!>
<!c>17<!>ERROR_NOT_SAME_DEVICE<!>
<!c>18<!>ERROR_NO_MORE_FILES<!>
<!c>19<!>ERROR_WRITE_PROTECT<!>
<!c>20<!>ERROR_BAD_UNIT<!>
<!c>21<!>ERROR_NOT_READY<!>
<!c>22<!>ERROR_BAD_COMMAND<!>
<!c>23<!>ERROR_CRC<!>
<!c>24<!>ERROR_BAD_LENGTH<!>
<!c>25<!>ERROR_SEEK<!>
<!c>26<!>ERROR_NOT_DOS_DISK<!>
<!c>27<!>ERROR_SECTOR_NOT_FOUND<!>
<!c>28<!>ERROR_OUT_OF_PAPER<!>
<!c>29<!>ERROR_WRITE_FAULT<!>
<!c>30<!>ERROR_READ_FAULT<!>
<!c>31<!>ERROR_GEN_FAILURE<!>
<!c>32<!>ERROR_SHARING_VIOLATION<!>
<!c>33<!>ERROR_LOCK_VIOLATION<!>
<!c>34<!>ERROR_WRONG_DISK<!>
<!c>36<!>ERROR_SHARING_BUFFER_EXCEEDED<!>
<!c>38<!>ERROR_HANDLE_EOF<!>
<!c>39<!>ERROR_HANDLE_DISK_FULL<!>
<!c>50<!>ERROR_NOT_SUPPORTED<!>
<!c>52<!>ERROR_DUP_NAME<!>
<!c>53<!>ERROR_BAD_NETPATH<!>
<!c>54<!>ERROR_NETWORK_BUSY<!>
<!c>55<!>ERROR_DEV_NOT_EXIST<!>
<!c>56<!>ERROR_TOO_MANY_CMDS<!>
<!c>80<!>ERROR_FILE_EXISTS<!>
<!c>107<!>ERROR_DISK_CHANGE<!>
<!c>108<!>ERROR_DRIVE_LOCKED<!>
<!c>110<!>ERROR_OPEN_FAILED<!>
<!c>111<!>ERROR_BUFFER_OVERFLOW<!>
<!c>112<!>ERROR_DISK_FULL<!>
<!c>113<!>ERROR_NO_MORE_SEARCH_HANDLES<!>
<!c>117<!>ERROR_INVALID_CATEGORY<!>
<!c>123<!>ERRROR_INVALID_NAME<!>
<!c>183<!>ERROR_ALREADY_EXISTS<!>
<!c>191<!>ERROR_INVALID_EXE_SIGNATURE<!>
<!c>192<!>ERROR_EXE_MARKED_INVALID<!>
<!c>193<!>ERROR_BAD_EXE_FORMAT<!>
<!ETBL>
>>


<<
128.115.205
Pfadschablonen
--
Folgende Pfadschablonen sind definiert:

<!STBL>
<!+>Wert<!+>Bedeutung<!>
<!> <!CW>%TYP%\ <!>Aktuelles Typdatenverzeichnis (das vom aktuellen Typ)<!>
<!> <!CW>%LOG%\ <!>Verzeichnis mit den Logbchern<!>
<!> <!CW>%TDR%\ <!>Typdatenverzeichnis (das mit der Typliste)<!>
<!> <!CW>%PRG%\ <!>Pfad des EXE-Programmes<!>
<!> <!CW>%SYS%\ <!>Programm Setup-Daten<!>
<!> <!CW>%IPS%\ <!>Interpreterschritte<!>
<!> <!CW>%LNG%\ <!>Aktuelle Sprache<!>
<!ETBL>

Die Pfadschablonen werden nur wirksam, wenn sie exakt so wie oben angegeben am Anfang eines Dateinamens benutzt werden!

Die Liste der Pfadschablonen wird u.U. in der Zukunft erweitert.
>>

<<
128.115.5
Beispiele mit IP Objekt File|Beispiele
--
>>
<<
128.115.5.1
Beispiel Datei Schreiben| Datei Schreiben
!128.115.2.6 - Procedure SetFileName
!128.115.2.4 - Procedure Delete
!128.115.2.7 - Procedure Open
!128.115.2.2 - Procedure WriteLn
!128.115.2.1 - Procedure Write
!128.115.2.8 - Procedure Close
!128.115.1.8 - Function Error
--

Mit dem nachfolgendem Beispiel wird eine Datei, wenn Sie existiert gelscht und neu erzeugt.
In die neu erzeugte Datei werden mehrere Zeilen geschrieben. Alle Zeilen bis auf die letzte
werden mit Zeilenumbruch erzeugt.

Wird bei diesem Vorgang ein Fehler erzeugt gibt der Schritt diesen zurck und wird in der
Debugging Anzeige ausgegeben.

<!TXT>

Beispiel:
<!CODE>
var
  vrLines        : real;     // Gibt die anzahl der Zeilen die in die Datei geschrieben werden an.
  vrLine         : real;     // Gibt die aktuelle Zeile die geschrieben wird an.
  vrErrorCode    : real;     // Gibt den Errorcode des letzen File Objekt Befehls an.
  vrLastOperaion : string;   // Gibt den Name des letzten File Objekt Befehls an.
Step
  vrLines := 7;   // Festlegen der Anzahl der Zeilen die geschrieben werden sollen.
  vrLine  := 1;   // Initalisieren der Variable auf die 1 Zeile.
  // Gibt die Datei an in die geschrieben werden soll und legt die ID fr die Datei fest.
  File.SetFileName( 1, '%PRG%\IPHelpExample.txt' );
  // Lscht die Datei mit der ID 1, wenn Sie nicht existiert wird nichts gemacht.
  File.Delete(1);
  vrLastOperaion := 'File.Delete';  // Letzen Befehl in der Variable angeben.
  vrErrorCode := File.Error;        // Errorcode des letzten File Objekt Befehls auslesen.
  // Ausgabe des Ergebnisses des letzten File Objekt Befehls.
  Debug.SHOW(1, 'Executed: ', vrLastOperaion, ' ErrorCode: ', vrErrorCode);
  // Wenn Errorcode = 0 (kein Fehler) wird der Inhalt von If ausgefhrt
  if vrErrorCode = 0 then
  begin
    // ffnen der Datei mit der ID 1, wenn Sie nicht exisitert wird Sie erzeugt.
    File.Open(1);
    vrLastOperaion := 'File.Open';  // Letzen Befehl in der Variable angeben.
    vrErrorCode := File.Error;      // Errorcode des letzten File Objekt Befehls auslesen.
    // Ausgabe des Ergebnisses des letzten File Objekt Befehls.
    Debug.SHOW(1, 'Executed: ', vrLastOperaion, ' ErrorCode: ', vrErrorCode);
    // Wenn Errorcode = 0 (kein Fehler) wird der Inhalt von If ausgefhrt
    if vrErrorCode = 0 then
    begin
      // Ausfhren der While Schleif bis all Zeilen geschrieben oder ein Error auftritt.
      while ((vrLines >= vrLine) and (vrErrorCode = 0)) do
      begin
        Inc(vrLine);  // Zeilen zhler incrementieren
        // Schreibt in die Datei mit der ID 1 eine Zeile.
        File.WriteLn(1,'This is line ' + Str(vrLine) + '.' );
        vrLastOperaion := 'File.WriteLn';  // Letzen Befehl in der Variable angeben.
        vrErrorCode := File.Error;         // Errorcode des letzten File Objekt Befehls auslesen.
        // Ausgabe des Ergebnisses des letzten File Objekt Befehls.
        Debug.SHOW(1, 'Executed: ', vrLastOperaion, ' ErrorCode: ', vrErrorCode);
      end;
      // Wenn Errorcode = 0 (kein Fehler) wird der Inhalt von If ausgefhrt
      if vrErrorCode = 0 then
      begin
        // Schreibt in die Datei mit der ID 1 einen String.
        File.Write(1,'This line is without a new line.' );
        vrLastOperaion := 'File.WriteLn';  // Letzen Befehl in der Variable angeben.
        vrErrorCode := File.Error;         // Errorcode des letzten File Objekt Befehls auslesen.
        // Ausgabe des Ergebnisses des letzten File Objekt Befehls.
        Debug.SHOW(1, 'Executed: ', vrLastOperaion, ' ErrorCode: ', vrErrorCode);
        // Wenn Errorcode = 0 (kein Fehler) wird der Inhalt von If ausgefhrt
        if vrErrorCode = 0 then
        begin
          // Schliet die Datei mit der ID 1.
          File.Close(1);
          vrLastOperaion := 'File.Close';  // Letzen Befehl in der Variable angeben.
          vrErrorCode := File.Error;       // Errorcode des letzten File Objekt Befehls auslesen.
          // Ausgabe des Ergebnisses des letzten File Objekt Befehls.
          Debug.SHOW(1, 'Executed: ', vrLastOperaion, ' ErrorCode: ', vrErrorCode);
        end;
      end;
    end;
  end;
  // Rckgabe des Errorcodes mit dem zu letzt ausgefhrten File Objekt Befehl.
  System.SetValue(vrErrorCode, vrLastOperaion);
end.
<!TXT>

>>