{"id":7218,"date":"2024-03-28T09:58:49","date_gmt":"2024-03-28T09:58:49","guid":{"rendered":"https:\/\/www.colorwave.it\/blog\/?p=7218"},"modified":"2024-03-28T10:05:24","modified_gmt":"2024-03-28T10:05:24","slug":"datafile-accesso-a-lettura-scrittura-file-e-memoria","status":"publish","type":"post","link":"https:\/\/www.colorwave.it\/blog\/colibri\/datafile-accesso-a-lettura-scrittura-file-e-memoria\/admin\/2024\/03\/","title":{"rendered":"DataFile: accesso a lettura\/scrittura file e memoria"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"7218\" class=\"elementor elementor-7218\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cca9b56 e-flex e-con-boxed e-con e-parent\" data-id=\"cca9b56\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-f349f1a e-con-full e-flex e-con e-child\" data-id=\"f349f1a\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2fbad09 elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"2fbad09\" data-element_type=\"widget\" data-settings=\"{&quot;exclude_headings_by_selector&quot;:[],&quot;headings_by_tags&quot;:[&quot;h2&quot;,&quot;h3&quot;,&quot;h4&quot;,&quot;h5&quot;,&quot;h6&quot;],&quot;marker_view&quot;:&quot;numbers&quot;,&quot;no_headings_message&quot;:&quot;No headings were found on this page.&quot;,&quot;minimize_box&quot;:&quot;yes&quot;,&quot;minimized_on&quot;:&quot;tablet&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t<h4 class=\"elementor-toc__header-title\">\n\t\t\t\tTable of Contents\t\t\t<\/h4>\n\t\t\t\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__2fbad09\" aria-expanded=\"true\" aria-label=\"Open table of contents\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/div>\n\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__2fbad09\" aria-expanded=\"true\" aria-label=\"Close table of contents\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/div>\n\t\t\t\t\t<\/div>\n\t\t<div id=\"elementor-toc__2fbad09\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<svg class=\"elementor-toc__spinner eicon-animation-spin e-font-icon-svg e-eicon-loading\" aria-hidden=\"true\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M500 975V858C696 858 858 696 858 500S696 142 500 142 142 304 142 500H25C25 237 238 25 500 25S975 237 975 500 763 975 500 975Z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d0805c9 elementor-widget elementor-widget-text-editor\" data-id=\"d0805c9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Introduzione<\/h3><p>Questo articolo \u00e8 il primo di una serie che descrive come utilizzare la classe DataFile per l&#8217;accesso in lettura e scrittura ad un file.<\/p><p>DataFile \u00e8 una classe che\u00a0 fornisce un insieme di metodi per leggere e scrivere vari tipi di dati, quali classe, numeri interi, caratteri, numeri in virgola mobile, ecc. Inoltre, fornisce funzionalit\u00e0 per gestire l&#8217;apertura e la chiusura dei file, la gestione degli errori e la manipolazione della posizione del cursore all&#8217;interno del file.<\/p><p>Inoltre permette la scrittura\/lettura bufferizzata su file, oltre che una definizione completamente trasparente della scrittura\/lettura\u00a0 di file, o sezioni di file compressi.<\/p><p><em><strong><span style=\"color: #666699;\">Di seguito sono asposti alcuni dei metodi della classe:<\/span><\/strong><\/em><\/p><p>\u2022\u00a0<strong>Open<\/strong>(int attrib, INT_PTR buf_size = DEFBSIZE, int error_Segn = 0):\u00a0 apre un file per le operazioni di input\/output. Gli attributi specificano il modo in cui il file deve essere aperto (ad esempio, in lettura, in scrittura, in modalit\u00e0 compressa, ecc.). Il parametro buf_size specifica la dimensione del buffer di input\/output, e error_Segn pu\u00f2 essere utilizzato per visualizzare un messaggio di errore in caso di mancata apertura del file.<\/p><p>\u2022\u00a0<strong>Write<\/strong>(void* buf, INT_PTR num_byte): scrive un numero di byte specificato dal buffer nel file.<\/p><p>\u2022\u00a0<strong>Read<\/strong>(void* buf, INT_PTR num_byte):\u00a0 legge un numero di byte specificato nel buffer dal file.<\/p><p>\u2022\u00a0<strong>Close<\/strong>(): chiude il file.<\/p><p>\u2022\u00a0<strong>ErrorStatus<\/strong>(): restituisce lo stato dell&#8217;errore di I\/O.<\/p><p>\u2022\u00a0<strong>SetName<\/strong>(STRING fname):\u00a0 imposta il nome del file.<\/p><p>\u2022\u00a0<strong>Name<\/strong>():\u00a0 restituisce il nome del file.<\/p><p>\u2022\u00a0<strong>SetErrorStatus<\/strong>(STRING description):\u00a0 imposta lo stato dell&#8217;errore e visualizza un messaggio di errore.<\/p><p>\u2022\u00a0<strong>WriteFlag<\/strong>(bool sts = true), ReadFlag(): Questi metodi scrivono e leggono un valore booleano, rispettivamente.<\/p><p>\u2022\u00a0<strong>SetBufferSize<\/strong>(INT_PTR dim):\u00a0modifica la dimensione del buffer di lettura\/scrittura.<\/p><p>\u2022\u00a0<strong>ActualFileSize<\/strong>(): restituisce il numero di byte scritti nel file.<\/p><p>\u2022\u00a0<strong>Seek<\/strong>(FILEPTR num_byte):\u00a0 sposta il puntatore del file di un numero specificato di byte.<\/p><p>\u2022\u00a0<strong>Flush<\/strong>(): scrive il buffer rimanente su file.<\/p><p>\u2022\u00a0<strong>isUnicode<\/strong>(): restituisce true se il file scritto \u00e8 in formato Unicode.<\/p><p>\u2022\u00a0<strong>OpenTempFile<\/strong>():\u00a0 statico alloca e apre un file temporaneo.<\/p><p>\u2022\u00a0<strong>Debug_sig_errors<\/strong>(bool mode), Debug_errors_status(): Questi metodi statici sono utilizzati per attivare e verificare lo stato del debug degli errori, rispettivamente.<\/p><p>La classe DataFile \u00e8 un componente fondamentale per la gestione dei file in C++, fornendo un&#8217;interfaccia di alto livello per l&#8217;accesso ai file e la manipolazione dei dati.<\/p><div>\u00a0Per aprire un file in modalit\u00e0 di lettura con la classe DataFile, \u00e8 possibile utilizzare il metodo\u00a0Open\u00a0con il flag READONLY. Ecco un esempio di come potrebbe essere fatto:<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7beeaa31 e-con-full e-flex e-con e-parent\" data-id=\"7beeaa31\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-557fe70a e-con-full e-flex e-con e-child\" data-id=\"557fe70a\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b6e687e elementor-widget elementor-widget-text-editor\" data-id=\"b6e687e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Alcuni esempi..<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-53a4072 elementor-widget elementor-widget-text-editor\" data-id=\"53a4072\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>Come utilizzare il metodo Open per aprire un file in modalit\u00e0 di lettura<\/h4><p>Per aprire un file in modalit\u00e0 di lettura con la classe DataFile, \u00e8 possibile utilizzare il metodo Open con il flag READONLY. Ecco un esempio di come potrebbe essere fatto:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ea34400 elementor-widget__width-initial elementor-widget elementor-widget-code-highlight\" data-id=\"ea34400\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>DataFile *fd = new DataFile(\"nomefile\");\nif (!fd->Open(READONLY)) {\n    \/\/ Gestisci l'errore di apertura del file qui\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-48bd74b0 elementor-widget elementor-widget-text-editor\" data-id=\"48bd74b0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>Chiudere il file dopo averlo aperto<\/h4><p>Per chiudere un file che hai aperto con la classe DataFile, puoi utilizzare il metodo Close. Ecco un esempio di come potrebbe essere fatto:<\/p><div>\u00a0<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8545c8b elementor-widget__width-initial elementor-widget elementor-widget-code-highlight\" data-id=\"8545c8b\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>DataFile *fd = new DataFile(\"nomefile\");\nif (!fd->Open(READONLY)) {\n    \/\/ Gestisci l'errore di apertura del file qui\n}\n\n\/\/ Fai qualcosa con il file qui\n\nfd->Close();\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a04364c elementor-widget elementor-widget-text-editor\" data-id=\"a04364c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>Gestire gli errori durante l&#8217;apertura o la chiusura di un file con DataFile<\/h4><p>La classe DataFile fornisce diversi metodi per gestire gli errori durante l&#8217;apertura o la chiusura di un file.<br \/>Durante l&#8217;apertura di un file, il metodo Open restituisce un intero che indica lo stato dell&#8217;operazione. Un valore diverso da zero indica un errore. Puoi gestire questo errore come preferisci, ad esempio stampando un messaggio di errore o lanciando un&#8217;eccezione.<br \/>Durante la chiusura di un file, non ci sono metodi specifici per gestire gli errori. Tuttavia, puoi utilizzare il metodo ErrorStatus per verificare se si \u00e8 verificato un errore durante l&#8217;uso dell&#8217;oggetto DataFile.<br \/>Ecco un esempio di come potrebbe essere fatto:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e4720b2 elementor-widget__width-initial elementor-widget elementor-widget-code-highlight\" data-id=\"e4720b2\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>DataFile *fd = new DataFile(\"nomefile\");\nif (fd->Open(READONLY) != 0) {\n    \/\/ Gestisci l'errore di apertura del file qui\n    std::cerr << \"Errore durante l'apertura del file\" << std::endl;\n    return;\n}\n\n\/\/ Fai qualcosa con il file qui\n\nfd->Close();\n\nif (fd->ErrorStatus()) {\n    \/\/ Gestisci l'errore qui\n    std::cerr << \"Si \u00e8 verificato un errore durante l'uso del file\" << std::endl;\n}\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d504c4e elementor-widget elementor-widget-text-editor\" data-id=\"d504c4e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>Leggere i dati da un file aperto<\/h4><p>Per leggere i dati da un file aperto con la classe DataFile, puoi utilizzare il metodo Read. Questo metodo richiede un puntatore all&#8217;area di memoria in cui vuoi leggere i dati e la dimensione dei dati da leggere.<br \/>Ecco un esempio di come potrebbe essere fatto:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e16b75a elementor-widget__width-initial elementor-widget elementor-widget-code-highlight\" data-id=\"e16b75a\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>DataFile *fd = new DataFile(\"nomefile\");\nif (!fd->Open(READONLY)) {\n    \/\/ Gestisci l'errore di apertura del file qui\n}\n\nchar buffer[1024];\nfd->Read(buffer, sizeof(buffer));\n\n\/\/ Fai qualcosa con i dati letti qui e\/o continua a leggere altri dati..\n\nfd->Close();\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e7344b6 elementor-widget elementor-widget-text-editor\" data-id=\"e7344b6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>Controllare se ho raggiunto la fine del file<\/h4><p>Per controllare se hai raggiunto la fine del file con la classe DataFile, puoi utilizzare il metodo Eof. Questo metodo restituisce true se hai raggiunto la fine del file e false altrimenti.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9839956 elementor-widget__width-initial elementor-widget elementor-widget-code-highlight\" data-id=\"9839956\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>DataFile *fd = new DataFile(\"nomefile\");\nif (!fd->Open(READONLY)) {\n    \/\/ Gestisci l'errore di apertura del file qui\n}\n\nchar buffer[1024];\nwhile (!fd->Eof()) {\n    fd->Read(buffer, sizeof(buffer));\n    \/\/ Fai qualcosa con i dati letti qui\n}\n\nfd->Close();\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8ec1d92 elementor-widget elementor-widget-text-editor\" data-id=\"8ec1d92\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><em>In questo esempio, dopo aver aperto il file, leggiamo i dati nel buffer fino a quando non raggiungiamo la fine del file. Ogni volta che leggiamo i dati, controlliamo se abbiamo raggiunto la fine del file utilizzando il metodo Eof. Se Eof restituisce true, interrompiamo il ciclo e chiudiamo il file.<\/em><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f2ee0a4 elementor-widget elementor-widget-text-editor\" data-id=\"f2ee0a4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>Scrivere dati in un file<\/h4><p>Per scrivere dati in un file con la classe DataFile, puoi utilizzare il metodo Write. Questo metodo richiede un puntatore ai dati che vuoi scrivere e la dimensione dei dati.<br \/>Ecco un esempio di come potrebbe essere fatto:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dc7e34b elementor-widget__width-initial elementor-widget elementor-widget-code-highlight\" data-id=\"dc7e34b\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>DataFile *fd = new DataFile(\"nomefile\");\nif (!fd->Open(CREATE)) {\n    \/\/ Gestisci l'errore di apertura del file qui\n}\n\nchar buffer[] = \"Ciao, mondo!\";\nfd->Write(buffer, sizeof(buffer));\n\nfd->Close();\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bfd9d47 e-flex e-con-boxed e-con e-parent\" data-id=\"bfd9d47\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Table of Contents Introduzione Questo articolo \u00e8 il primo di una serie che descrive come utilizzare la classe DataFile per l&#8217;accesso in lettura e scrittura ad un file. DataFile \u00e8 una classe che\u00a0 fornisce un insieme di metodi per leggere e scrivere&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false,"jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[90],"tags":[],"jetpack_publicize_connections":[],"acf":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9rwsf-1Sq","jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.colorwave.it\/blog\/wp-json\/wp\/v2\/posts\/7218"}],"collection":[{"href":"https:\/\/www.colorwave.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.colorwave.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.colorwave.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.colorwave.it\/blog\/wp-json\/wp\/v2\/comments?post=7218"}],"version-history":[{"count":18,"href":"https:\/\/www.colorwave.it\/blog\/wp-json\/wp\/v2\/posts\/7218\/revisions"}],"predecessor-version":[{"id":7236,"href":"https:\/\/www.colorwave.it\/blog\/wp-json\/wp\/v2\/posts\/7218\/revisions\/7236"}],"wp:attachment":[{"href":"https:\/\/www.colorwave.it\/blog\/wp-json\/wp\/v2\/media?parent=7218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.colorwave.it\/blog\/wp-json\/wp\/v2\/categories?post=7218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.colorwave.it\/blog\/wp-json\/wp\/v2\/tags?post=7218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}