Lösungsvorschläge

PC-Dateien unter Kontrolle

ASNA stellt Steuerelemente für das Lesen und Schreiben einer PC-Datei (OS-File) zur Verfügung, aber Funktionen wie Löschen, Umbenennen oder sogar Verzeichnisse auslesen sind ebenso wichtig für die Verarbeitung von Schnittstellen.

In diesem Beispiel werden die Dateien eines ausgewählten Verzeichnisses in eine Subfile geschrieben. Über Auswahl der Datei und die Schaltfläche "Löschen" kann die gewählte Datei gelöscht werden (Vorsicht: "Weg ist Weg", Sie finden diese Datei nicht im Papierkorb!!!).

Technik

Die meisten Funktionen für die Bearbeitung von PC-Dateien finden Sie im FileSystemObject. Dieses object is bestandteil der Microsoft Scripting Runtime (Über Menüpunkt Projects --> References integrierbar). Außerdem brauchen wir für die Verarbeitung von Verzeichnisinhalte (Arrays aber dann nach Microsoft) die "Enumerator Type Library" (ebenfalls integrieren).

Im Objectbrowser (Strg + F2) finden Sie was die Scripting Runtime noch alles bietet...

Vorraussetzung

  • Microsoft Windows
  • ASNA Visual RPG Classic

Quellcode

DclFld FSys$$ Type(Scripting.FileSystemObject)
DclFld SDir$$ Type(*String)

//----------------------------------
// LoadSubfile
//----------------------------------

BegSr LoadSubfile
    DclFld en Type(EnumeratorLib.Iterator)
    DclFld Fldr$$ Type(Scripting.Folder)
    DclFld Strm$$ Type(Scripting.File)

    Subfile.ClearObj()
    Fldr$$ = FSys$$.GetFolder(SDir$$)
    If (Fldr$$.files.Count > 0 )
      en.Init( Fldr$$.Files )
      DoWhile ( Not en.AtEnd )
        Strm$$ = en.Item
        S$File = Strm$$.Path
        RecNum = Subfile.RowCount + 1
        Write Subfile
        en.MoveNext()
      EndDo
    EndIf
    If Subfile.RowCount > 0
      CmdDelete.Enabled = *True
    Else
      CmdDelete.Enabled = *False
    EndIf
EndSr

//----------------------------------
// Select a folder
//----------------------------------

BEGSR CmdSelect Click

    If CD1.ShowFolder() = 0
      SDir$$ = CD1.Folder
      F$SDir = SDir$$
      LoadSubfile()
    EndIf
ENDSR

//----------------------------------
// Löschen
//----------------------------------

BEGSR CmdDelete Click

    DclFld File$$ Type(*String)

    RecNum = Subfile.Row + 1
    Chain Subfile Key(RecNum)
    If %Found
      File$$ = %Trim(S$File)
      FSys$$.DeleteFile(File$$)
      LoadSubfile()
    EndIf
ENDSR