{"id":55000182,"date":"2019-08-01T00:00:00","date_gmt":"2020-03-27T19:38:12","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=182"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Mit_Dateien_und_Verzeichnissen_arbeiten","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Mit_Dateien_und_Verzeichnissen_arbeiten\/","title":{"rendered":"Mit Dateien und Verzeichnissen arbeiten"},"content":{"rendered":"<p><b>Wer unter Visual Studio Anwendungen mit Visual Basic programmiert, wird fr&uuml;her oder sp&auml;ter an den Punkt kommen, wo er mit Dateien und Verzeichnissen arbeitet. Dabei gibt es Aufgaben wie zu ermitteln, ob eine Datei bereits vorhanden ist, eine Datei von einem Verzeichnis in ein anderes zu kopieren, alle Dateien eines Verzeichnisses zu durchlaufen oder dies gar rekursiv f&uuml;r untergeordnete Verzeichnisse und Dateien zu erledigen. Nat&uuml;rlich bietet Microsoft passende M&ouml;glichkeiten an, die kaum noch etwas mit den von VBA gewohnten Befehlen zu tun haben und auch nicht mit den Methoden des FileSystemObjects.<\/b><\/p>\n<p>Die Beispiele dieses Artikels haben wir mit dem Tool <b>LINQPad <\/b>durchgespielt, das die einfache Eingabe von Visual Basic- und C#-Anweisungen und deren Ausf&uuml;hrung erlaubt. Sie m&uuml;ssen hier nicht immer erst das Projekt kompilieren, um die enthaltenen Anweisungen zu debuggen, sondern k&ouml;nnen dies quasi ad hoc erledigen (Download siehe <b>https:\/\/www.linqpad.net<\/b>).<\/p>\n<h2>Der Namespace System.IO<\/h2>\n<p>Die Objekte, Methoden und Eigenschaften, die wir in diesem Artikel vorstellen, befinden sich im Namespace <b>System.IO<\/b>. Um diesen f&uuml;r eine Datei in LINQPad verf&uuml;gbar zu machen, bet&auml;tigen Sie die Taste <b>F4<\/b>. Dadurch wird der Dialog <b>Query Properties <\/b>ge&ouml;ffnet. In diesem wechseln Sie zum zweiten Registerreiter <b>Additional Namespace Imports<\/b>. Hier tragen Sie einfach wie in Bild 1 den folgenden Namespace ein:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_182_001.png\" alt=\"Hinzuf&uuml;gen von Namespaces\" width=\"599,593\" height=\"362,3582\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Hinzuf&uuml;gen von Namespaces<\/span><\/b><\/p>\n<pre>System.IO<\/pre>\n<p>Danach stehen die Elemente dieses Namespaces in dem entsprechenden Fenster von <b>LINQPad <\/b>zur Verf&uuml;gung.<\/p>\n<h2>Laufwerke<\/h2>\n<p>Das oberste Element der Hierarchie der Elemente des Dateisystems sind die Laufwerke. Diese k&ouml;nnen wir &uuml;ber die Funktion <b>GetDrives<\/b> auslesen und erhalten damit Objekte des Typs <b>DriveInfo<\/b>. Diese wiederum liefern einige Eigenschaften, mit denen wir die Informationen zum jeweiligen Laufwerk auslesen k&ouml;nnen. <\/p>\n<h2>Laufwerke ausgeben<\/h2>\n<p>Die Anweisungen, die wir ausprobieren wollen, f&uuml;gen wir jeweils in die <b>Sub Main<\/b>-Prozedur ein. Wir steigen gleich ein und wollen alle Laufwerke des aktuellen Rechners im Direktfenster ausgeben. Dazu deklarieren wir zun&auml;chst ein Array namens <b>objDrives <\/b>und eine Variable namens <b>objDrive<\/b>, beide vom Typ <b>DriveInfo<\/b>. Es gibt kein Auflistungsobjekt, sondern eine Funktion namens <b>GetDrives<\/b>, die alle Laufwerke zur&uuml;ckliefert. Das Ergebnis, das wir zum Array <b>objDrives <\/b>hinzuf&uuml;gen, durchlaufen wir in einer <b>For Each<\/b>-Schleife. Dabei referenzieren wir das aktuelle Element jeweils mit der Variablen <b>objDrive <\/b>und geben den Wert seiner Eigenschaft <b>Name <\/b>aus:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>Main\r\n     <span style=\"color:blue;\">Dim <\/span>objDrives()<span style=\"color:blue;\"> As <\/span>DriveInfo\r\n     <span style=\"color:blue;\">Dim <\/span>objDrive<span style=\"color:blue;\"> As <\/span>DriveInfo\r\n     objDrives = DriveInfo.GetDrives()\r\n     For Each objDrive In objDrives\r\n         Debug.print (objDrive.Name)\r\n     <span style=\"color:blue;\">Next<\/span> objDrive&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue;\">End Sub<\/span> <\/pre>\n<p>Das Ergebnis sieht im Fall des hier verwendeten Rechners etwa wie in Bild 2 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_182_002.png\" alt=\"Ausgabe der Laufwerksnamen\" width=\"549,6265\" height=\"377,8684\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Ausgabe der Laufwerksnamen<\/span><\/b><\/p>\n<h2>Eigenschaften von Laufwerken<\/h2>\n<p>Das <b>DriveInfo<\/b>-Objekt bietet eine ganze Reihe von Eigenschaften. Mit den folgenden Anweisungen geben wir diese im Direktbereich aus:<\/p>\n<pre>For Each objDrive In objDrives\r\n     Debug.print (objDrive.Name)\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(\"AvailableFreeSpace: \" & objDrive.AvailableFreeSpace.ToString())\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(\"DriveFormat:        \" & objDrive.DriveFormat.ToString())\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(\"DriveType:          \" & objDrive.DriveType.ToString())\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(\"IsReady:            \" & objDrive.IsReady.ToString())\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(\"RootDirectory:      \" & objDrive.RootDirectory.ToString())\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(\"TotalFreeSpace:     \" & objDrive.TotalFreeSpace.ToString())\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(\"TotalSize:          \" & objDrive.TotalSize.ToString())\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(\"VolumeLabel:        \" & objDrive.VolumeLabel.ToString())\r\n<span style=\"color:blue;\">Next<\/span> objDrive&nbsp;&nbsp;&nbsp;&nbsp;<\/pre>\n<p>Die Eigenschaft <b>IsReady <\/b>ist beispielsweise interessant f&uuml;r CD\/DVD-Laufwerke. Ist keine CD oder DVD eingelegt, liefert <b>IsReady <\/b>den Wert <b>False<\/b>. Ein Zugriff auf Eigenschaften wie <b>AvailableFreeSpace<\/b> oder <b>DriveFormat <\/b>ist somit nicht m&ouml;glich, <b>Name <\/b>oder <b>DriveType <\/b>hingegen funktionieren. Um beim Zugriff auf alle Laufwerke Ausnahmen zu verhindern, k&ouml;nnen Sie pr&uuml;fen, ob das Laufwerk bereit ist und nur dann auf die Eigenschaften zugreifen, die bei nicht bereiten Laufwerken nicht zur Verf&uuml;gung stehen. Dazu verwenden wir eine einfache <b>If&#8230;Then<\/b>-Bedingung:<\/p>\n<pre>For Each objDrive In objDrives\r\n     Debug.print(objDrive.Name)\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(\"DriveType:          \" & objDrive.DriveType.ToString())\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(\"IsReady:            \" & objDrive.IsReady.ToString())\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(\"RootDirectory:      \" & objDrive.RootDirectory.ToString())\r\n     <span style=\"color:blue;\">If <\/span>(objDrive.IsReady)<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span>(\"AvailableFreeSpace: \" & objDrive.AvailableFreeSpace.ToString())\r\n         <span style=\"color:blue;\">Debug.Print<\/span>(\"DriveFormat:        \" & objDrive.DriveFormat.ToString())\r\n         <span style=\"color:blue;\">Debug.Print<\/span>(\"TotalFreeSpace:     \" & objDrive.TotalFreeSpace.ToString())\r\n         <span style=\"color:blue;\">Debug.Print<\/span>(\"TotalSize:          \" & objDrive.TotalSize.ToString())\r\n         <span style=\"color:blue;\">Debug.Print<\/span>(\"VolumeLabel:        \" & objDrive.VolumeLabel.ToString())\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">Next<\/span> objDrive<\/pre>\n<p>Praktischerweise geben Eigenschaften wie etwa <b>DriveFormat <\/b>nicht wie unter VBA nur die Zahlenwerte von Konstanten aus, sondern &uuml;ber die Funktion <b>ToString() <\/b>auch direkt entsprechende Zeichenketten. Ben&ouml;tigen Sie einmal den Zahlenwert, k&ouml;nnen Sie <b>ToString() <\/b>einfach weglassen.<\/p>\n<h2>Auf ein Verzeichnis zugreifen<\/h2>\n<p>Auf ein Verzeichnis greifen wir &uuml;ber das <b>DirectoryInfo<\/b>-Objekt zu. Dieses erstellen wir jeweils mit der <b>New<\/b>-Methode und &uuml;bergeben der Konstruktor-Methode dabei den Namen des Verzeichnisses. Hier geben wir direkt die Eigenschaften als Kommentar hinter der jeweiligen Anweisung an:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objDirectoryInfo<span style=\"color:blue;\"> As <\/span>DirectoryInfo\r\nobjDirectoryInfo = <span style=\"color:blue;\">New<\/span> DirectoryInfo(\"c:\\Beispiele\")\r\n<span style=\"color:blue;\">Debug.Print<\/span> (objDirectoryInfo.CreationTime.ToString)    ''01.01.1601 01:00:00\r\n<span style=\"color:blue;\">Debug.Print<\/span> (objDirectoryInfo.CreationTimeUtc)&nbsp;&nbsp;&nbsp;&nbsp;   ''01.01.1601\r\n<span style=\"color:blue;\">Debug.Print<\/span> (objDirectoryInfo.Extension)                ''\r\n<span style=\"color:blue;\">Debug.Print<\/span> (objDirectoryInfo.Exists)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   ''<span style=\"color:blue;\">False<\/span>\r\n<span style=\"color:blue;\">Debug.Print<\/span> (objDirectoryInfo.FullName)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   ''c:\\Beispiele\r\n<span style=\"color:blue;\">Debug.Print<\/span> (objDirectoryInfo.Name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            ''Beispiele\r\n<span style=\"color:blue;\">Debug.Print<\/span> (objDirectoryInfo.Root.FullName)&nbsp;&nbsp;&nbsp;&nbsp;            ''c:\\<\/pre>\n<h2>Verzeichnisse eines Laufwerks lesen<\/h2>\n<p>Damit haben wir zwar schon einen Weg gefunden, auf ein Verzeichnis zuzugreifen, dessen Namen wir kennen. Aber wie k&ouml;nnen wir beispielsweise alle Verzeichnisse eines Laufwerks lesen und ausgeben Es sieht nicht so aus, als ob das <b>DriveInfo<\/b>-Objekte Eigenschaften bereitstellt, die eine Auflistung aller untergeordneten Verzeichnisse liefert. Aber wir kommen dennoch zum Ziel, denn das <b>DirectoryInfo<\/b>-Objekt bietet eine Funktion namens <b>GetDirectories<\/b>. Und da ein Laufwerk ja prinzipiell auch ein Verzeichnis abbilden, zum Beispiel c:\\, k&ouml;nnen wir diese Funktion nutzen, um die Verzeichnisse eines Laufwerks zu ermitteln. Insgesamt sieht das etwa wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objDrive<span style=\"color:blue;\"> As <\/span>DriveInfo\r\n<span style=\"color:blue;\">Dim <\/span>objDirectoryDrive<span style=\"color:blue;\"> As <\/span>DirectoryInfo\r\n<span style=\"color:blue;\">Dim <\/span>objDirectory<span style=\"color:blue;\"> As <\/span>DirectoryInfo\r\nobjDrive = <span style=\"color:blue;\">New<\/span> DriveInfo(\"c:\")\r\nobjDirectoryDrive = <span style=\"color:blue;\">New<\/span> DirectoryInfo(objDrive.Name)\r\nFor Each objDirectory In objDirectoryDrive.GetDirectories\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(objDirectory.FullName)\r\n<span style=\"color:blue;\">Next<\/span> objDirectory<\/pre>\n<p>Wir holen also das <b>DriveInfo<\/b>-Objekt und erstellen ein <b>DirectoryInfo<\/b>-Objekte mit dem Namen des <b>DriveInfo<\/b>-Objektes als Parameter. Dann durchlaufen wir diese Verzeichnisse in einer <b>For Each<\/b>-Schleife und geben mit der Eigenschaft <b>FullName <\/b>den Pfad der Verzeichnisse aus &#8211; zum Beispiel so:<\/p>\n<pre>c:\\Dokumente und Einstellungen\r\nc:\\inetpub\r\nc:\\Intel\r\nc:\\MSOCache\r\n...<\/pre>\n<h2>Verzeichnisse suchen<\/h2>\n<p>Wir k&ouml;nnen der <b>GetDirectories<\/b>-Methode auch noch einen Suchbegriff als Parameter &uuml;bergeben. Folgender Aufruf liefert alle Verzeichnisse, die mit <b>Windows <\/b>beginnen:<\/p>\n<pre>objDirectoryDrive.GetDirectories(\"Windows*\")<\/pre>\n<p>Als Platzhalter k&ouml;nnen die von Access-SQL bekannten Platzhalter verwendet werden:<\/p>\n<ul>\n<li>Sternchen (<b>*<\/b>): Platzhalter f&uuml;r beliebig viele beliebige Zeichen<\/li>\n<li>Fragezeichen (<b><\/b>): Platzhalter f&uuml;r ein beliebiges Zeichen<\/li>\n<\/ul>\n<p>Und es gibt noch einen zweiten Parameter namens <b>searchOption<\/b>. Mit diesem k&ouml;nnen Sie festlegen, ob nur in der obersten Ebene gesucht werden soll oder rekursiv auch in den untergeordneten Verzeichnissen. Die Werte lauten:<\/p>\n<ul>\n<li><b>AllDirectories <\/b>(<b>1<\/b>): Alle Verzeichnisse inklusive Unterverzeichnisse durchsuchen<\/li>\n<li><b>TopDirectoryOnly <\/b>(<b>0<\/b>): Nur das aktuelle Verzeichnis durchsuchen<\/li>\n<\/ul>\n<p>Wenn Sie den Parameterwert <b>AllDirectories <\/b>verwenden, kann es zu einem Fehler kommen, weil der Benutzer nicht ausreichende Berechtigungen f&uuml;r den Zugriff auf alle betroffenen Verzeichnisse hat. Der Aufruf f&uuml;r eine rekursive Suche sieht so aus:<\/p>\n<pre>objDirectoryDrive.GetDirectories(\"Windows*\", searchOption.AllDirectories)<\/pre>\n<h2>Besonderheit von DirectoryInfo: (Noch) nicht vorhandene Verzeichnisse<\/h2>\n<p>Das <b>DirectoryInfo<\/b>-Objekt hat eine Besonderheit, genauso wie das <b>DriveInfo<\/b>-Objekt und, wie wir weiter unten sehen werden, auch das <b>FileInfo<\/b>-Objekt. All diese Objekte k&ouml;nnen Sie mit der Angabe bestimmter Laufwerke, Verzeichnisse oder Dateien instanzieren, auch wenn die angegebenen Elemente noch gar nicht im Dateisystem vorhanden sind. Wir werden gleich als Beispiel f&uuml;r die Methoden von Verzeichnissen zeigen, wie Sie damit erst pr&uuml;fen, ob ein Element bereits vorhanden ist und dieses gegebenenfalls erstellen k&ouml;nnen.<\/p>\n<h2>Methoden von Verzeichnissen<\/h2>\n<p>Das <b>DirectoryInfo<\/b>-Objekt als Repr&auml;sentant eines Verzeichnisses bietet eine ganze Reihe Methoden an, mit denen verschiedene Aufgaben rund um Verzeichnisse erledigt werden k&ouml;nnen &#8211; vom Erstellen &uuml;ber das L&ouml;schen und Verschieben bis hin zum Ermitteln der in einem Verzeichnis enthaltenen Daten:<\/p>\n<ul>\n<li><b>Create<\/b>: Erstellt das im <b>DirectoryInfo <\/b>angegebene Verzeichnis.<\/li>\n<li><b>CreateSubdirectory<\/b>: Erstellt ein Unterverzeichnis im Verzeichnis aus dem <b>DirectoryInfo<\/b>-Objekt.<\/li>\n<li><b>Delete<\/b>: Mit der <b>Delete<\/b>-Methode l&ouml;schen Sie das Verzeichnis, das im <b>DirectoryInfo<\/b>-Objekt angegeben ist.<\/li>\n<li><b>EnumerateDirectories<\/b>: Liefert eine Auflistung der im referenzierten Verzeichnis enthaltenen Verzeichnisse als <b>IEnumerable<\/b>-Objekt.<\/li>\n<li><b>EnumerateFiles<\/b>: Liefert eine Auflistung der im referenzierten Verzeichnis enthaltenen Dateien als <b>IEnumerable<\/b>-Objekt.<\/li>\n<li><b>EnumerateFileSystemInfos<\/b>: Liefert eine Auflistung der im referenzierten Verzeichnis enthaltenen Verzeichnisse und Dateien gleichzeitig als <b>IEnumerable<\/b>-Objekt.<\/li>\n<li><b>GetDirectories<\/b>: Liefert alle Unterverzeichnisse des referenzierten Verzeichnisses als <b>String<\/b>-Array.<\/li>\n<li><b>GetFiles<\/b>: Liefert alle Dateien des referenzierten Verzeichnisses als <b>String<\/b>-Array.<\/li>\n<li><b>GetFileSystemInfos<\/b>: Liefert alle Unterverzeichnisse und Dateien des referenzierten Verzeichnisses als <b>String<\/b>-Array.<\/li>\n<li><b>MoveTo<\/b>: Verschiebt das referenzierte Verzeichnis in das als Parameter angegebene Verzeichnis.<\/li>\n<\/ul>\n<h2>Pr&uuml;fen, ob ein Verzeichnis vorhanden ist<\/h2>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000182\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000182?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000182\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"dbce743e9d\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer unter Visual Studio Anwendungen mit Visual Basic programmiert, wird fr&uuml;her oder sp&auml;ter an den Punkt kommen, wo er mit Dateien und Verzeichnissen arbeitet. Dabei gibt es Aufgaben wie zu ermitteln, ob eine Datei bereits vorhanden ist, eine Datei von einem Verzeichnis in ein anderes zu kopieren, alle Dateien eines Verzeichnisses zu durchlaufen oder dies gar rekursiv f&uuml;r untergeordnete Verzeichnisse und Dateien zu erledigen. Nat&uuml;rlich bietet Microsoft passende M&ouml;glichkeiten an, die kaum noch etwas mit den von VBA gewohnten Befehlen zu tun haben und auch nicht mit den Methoden des FileSystemObjects.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662019,66042019,44000016],"tags":[],"yst_prominent_words":[],"class_list":["post-55000182","post","type-post","status-publish","format-standard","hentry","category-662019","category-66042019","category-VBGrundlagen"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000182","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000182"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000182\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000182"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000182"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000182"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}