Scrittura File "\0"

di il
3 risposte

Scrittura File "\0"

Salve,

premetto che è da pochissimo che ho inziato a programmare in C. Mi serve un aiuto a risolvere un problema per quanto riguarda la scrittura di un file.

In pratica sto creando un programma che legge da un lettore di codici a barre e memorizza al suo interno i dati letti (con dati intendo codice, quantità, scadenza ecc ).
Per la creazione e scrittura del primo record utilizzo una lseek con parametro SEEK_SET, per la seconda scittura vado in Append sempre tramite una lseek fatta così:

lseek(file ,0L, SEEK_END).

I record vengono scritti sul file, solo che tutte le scritture in append hanno all'inizio della riga 15 valori a NULL ( cosa che non succede con la prima lseek, cioè quella che scrive la prima riga).

So che sono poche info, ma non vorrei allargarmi troppo visto che è per lavoro.

Grazie

3 Risposte

  • Re: Scrittura File "\0"

    Si capirebbe meglio se postassi parte del codice coinvolto, dall'apertura alla chiusura del file ...
  • Re: Scrittura File "\0"

    
    int scriviMisura ( FileStruct *documento, char* record, int modalita)
    {
    	long posizioneCorrente;
    	
    	if( modalita == WRITE_OVER )
    	{
    		if( (posizioneCorrente = GetCurrentRecord( documento)) == -1L )
    			return FALSE;
    		
    		if( lseek( documento->handle, (long)(documento->recordSize* posizioneCorrente), SEEK_SET ) == -1L)
    		{
    			codiceErrore = Errore_DB;
    			return FALSE;
    		}
    	}
    	else if( modalita == WRITE_APPEND )
    	{
    		if( lseek( documento->handle,0L, SEEK_END ) == -1L )
    		{
    			codiceErrore =  Errore_DB;
    			return FALSE;
    		}
    	}
    	else
    	{
    		codiceErrore =  Errore_DB;
    		return FALSE;
    	}
    
    	if( write( documento->handle, record, documento->recordSize) != documento->recordSize)
    	{
    		codiceErrore = ErroreScrittura;
    		return FALSE;
    	}
    
    	if( modalita == WRITE_APPEND )
    	{
    		documento->recordTotali++;
    		GotoRecord( documento, RestituisciRecordTotali( documento) -1L );
    	}
    
    	return TRUE;
    }
    
    
    int GotoRecord( FileStruct *documento, long numeroRecord)
    {
    	long recordTotali;
    	if( ( totalrecords = RestituisciRecordTotali( numeroRecord)) == -1L )
    		return FALSE;
    
    	if( numeroRecord< 0L || numeroRecord>= recordTotali)
    	{
    		codiceErrore = Errore_DB;
    		return FALSE;
    	}
    
    	documento->recordCorrente = numeroRecord;
    
    	return TRUE;
    }
    
    
    long RestituisciRecordTotali( FileStruct *documento)
    {
    	return documento->recordTotali;
    }
    

    Il codice è stato un po' ritoccato, quindi è possibile che manchi qualche riferimento. Spero che si capisca quello che fa.

    Grazie per l'aiuto
  • Re: Scrittura File "\0"

    Per completezza, ecco come appare il file una volta scaricato e aperto con editor

    XXXXXXXXXX , 2, ,
    nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullXXXXXXXXXX , 4, ,
    nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullXXXXXXXXXX , 1, ,
    nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullXXXXXXXXXX , 2, ,
    nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullXXXXXXXXXX , 2, ,
    nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullXXXXXXXXXX , 3, ,
    nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullXXXXXXXXXX , 1, ,
Devi accedere o registrarti per scrivere nel forum
3 risposte