PDA

View Full Version : C# - lettura e scrittura file binari con tipo di dato non standard


mirkus90
26-02-2015, 19:13
Salve, ho un dubbio, più che altro vorrei un'indicazione. Sto sviluppando un software in c#, e mi trovo difronte al salvataggio/lettura su/da file, leggere da file di testo sarebbe un po lungnetto, perciò ho pensato ai file binari (in c si prestavano bene alla lettura in blocco di una struct creata da me, e mi bastava leggere e porre un uguaglianza per risolvere tutto). Il dubbio mi sorge perché sul web ho trovato poco materiale sui file binari al di fuori dei tipi di dato standard.
Avete materiale o mi sapete reindirizzare a materiale utile??


Inviato dal mio iPad utilizzando Tapatalk

[Kendall]
26-02-2015, 20:34
Salve, ho un dubbio, più che altro vorrei un'indicazione. Sto sviluppando un software in c#, e mi trovo difronte al salvataggio/lettura su/da file, leggere da file di testo sarebbe un po lungnetto, perciò ho pensato ai file binari (in c si prestavano bene alla lettura in blocco di una struct creata da me, e mi bastava leggere e porre un uguaglianza per risolvere tutto). Il dubbio mi sorge perché sul web ho trovato poco materiale sui file binari al di fuori dei tipi di dato standard.
Avete materiale o mi sapete reindirizzare a materiale utile??


Inviato dal mio iPad utilizzando Tapatalk

Perché dici che leggere/scrivere da/su file sia troppo lungo?
Se non hai esigenze specifiche trovo che serializzare e deserializzare oggetti tramite strutture json o xml sia una delle vie più semplici.

Prima di darti consigli più specifici comunque ti chiederei qual'è la tipologia di oggetto che devi salvare su file.

mirkus90
26-02-2015, 20:50
intendevo utilizzare file di testo classici...
Allora io ho queste due classi

public class uscita_modbus
{
private int id;
private bool temporizzazione;
private int tempo;
private int funzione;
private comunicazione com;
private DateTime inizio_1;
private DateTime inizio_2;
private DateTime inizio_3;
private DateTime fine_1;
private DateTime fine_2;
private DateTime fine_3;
private bool timer_1;
private bool timer_2;
private bool timer_3;
private bool azione;
private bool stato_t;
}


public class modbus_device
{
public string[] name= new string[8];
private int[] stato_uscite = new int[8];
private int[] stato_on_off = new int[8];
private int[] stato_temporizzatore = new int[8];
private uscita_modbus[] ext = new uscita_modbus[8];
}

la classe modbus_device rappresenta una singola scheda che utilizza il protocollo modbus...
l'utilizzo dei file di testo per salvarmi l'intero dato modbus_device l'ho scartato subito perchè mi è parso altamente inefficiente.
Per quanto riguarda l'xml...me lo consigli ai binari? Hai materiale informativo ottimo a riguardo?? (intanto vedo di cercare sul web a riguardo)

[Kendall]
26-02-2015, 21:40
intendevo utilizzare file di testo classici...
Allora io ho queste due classi

public class uscita_modbus
{
private int id;
private bool temporizzazione;
private int tempo;
private int funzione;
private comunicazione com;
private DateTime inizio_1;
private DateTime inizio_2;
private DateTime inizio_3;
private DateTime fine_1;
private DateTime fine_2;
private DateTime fine_3;
private bool timer_1;
private bool timer_2;
private bool timer_3;
private bool azione;
private bool stato_t;
}


public class modbus_device
{
public string[] name= new string[8];
private int[] stato_uscite = new int[8];
private int[] stato_on_off = new int[8];
private int[] stato_temporizzatore = new int[8];
private uscita_modbus[] ext = new uscita_modbus[8];
}

la classe modbus_device rappresenta una singola scheda che utilizza il protocollo modbus...
l'utilizzo dei file di testo per salvarmi l'intero dato modbus_device l'ho scartato subito perchè mi è parso altamente inefficiente.
Per quanto riguarda l'xml...me lo consigli ai binari? Hai materiale informativo ottimo a riguardo?? (intanto vedo di cercare sul web a riguardo)

I file xml e json SONO file di testo, solo che incorporano una specifica per la creazione di strutture di dati.
Detto questo, a meno che tu non debba salvare/caricare centinaia se non migliaia di quelle strutture dati su file non ci saranno mai apprezzabili differenze di performance tra le varie metodologie (json/xml/binario).
Il tutto fermo restando che è da dimostrare che serializzare/deserializzare tramite binario sia più veloce che tramite, per esempio, json (secondo me non è così).

Detto questo, ci sono molteplici metodi per serializzare e deserializzare json ed xml tramite C#: DataContract, XmlSerializer, LINQToXML, e diversi altri.

Io comunque andrei di JSON, e per C# c'è questo ottimo parser: Json.NET (http://www.newtonsoft.com/json).

Prova a darci un'occhiata e se hai dubbi posta qui ;-)

mirkus90
28-02-2015, 09:15
Ok risolto con gli xml, grazie tante di cuore, inoltre json l'ho trovato molto interessante, non nego di volerlo utilizzare prossimamente.


Inviato dal mio iPad utilizzando Tapatalk