[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Defektes Archiv



On Wed, Mar 22, 2006 at 01:29:24PM +0100, Torsten Geile wrote:
> Am Wed, 22 Mar 2006 11:10:13 +0100 schrieb Andreas Pakulat:
> 
> 
> > Gar nicht, weil dort keine weiteren Daten sind? Er erzaehlt was von
> > "unexpected end of file", die Datei ist also einfach früher zu Ende als
> > "gedacht" bzw. im gzip-Header angegeben. Ich würde sagen da ist bei der
> > Datenübertragung was schief gegangen...
> > 
> 
> Da frag ich mich doch, bei welcher Datenübertragung das passiert sein
> soll. Das archiv wird lokal erstellt und auch lokal abgelegt. 
> 
> Habe mittlerweile mal gzrecover zum laufen bekommen, aber es bringt
> nichts. Die Daten sind einfach nicht drin. Merkwürdig nur, warum ich nie
> eine Fehlermeldung diesbezüglich erhalten hatte.
> 

Wenn die Daten die Du dort noch vermutest es Dir wert sind kannst Du
anhängendes Programm mal drüber laufen lassen. Es ergeben sich mehr oder
weniger viele Archive die es evtl. ermöglichen ein bischen was zu retten.
Ist aber wirklich Puzzelarbeit.

> Torsten
>

Mathias
#include "stdio.h"

int main (int argc, char *argv[])
{
    FILE		*file=NULL;
    char		filename[255];
    unsigned int	buffer[4];
    unsigned int	testbuffer[4];
    unsigned int	index=1;
    int			i=0;
    long long		bytes=0;
    
    testbuffer[0] = 0x1f;
    testbuffer[1] = 0x8b;
    testbuffer[2] = 0x08;
    testbuffer[3] = 0x08;
    buffer[0] = 0x00;
    buffer[1] = 0x00;
    buffer[2] = 0x00;
    buffer[3] = 0x00;
    
    while (1) {
	    buffer[3]=fgetc(stdin);
	    if (buffer[3] == EOF) {
		if (file != NULL) {
		    fputc(buffer[0], file);
		    fputc(buffer[1], file);
		    fputc(buffer[2], file);
		}
		
		break;
	    }
	    
	    if (testbuffer[0] == buffer[0] &&
		testbuffer[1] == buffer[1] &&
		testbuffer[2] == buffer[2] &&
		testbuffer[3] == buffer[3] ) {
		        if(file != NULL)
			    fclose(file);
			
			sprintf(filename, "out-%04d.gz", index++);
//			printf("%s\n", filename);
			file=fopen(filename, "w");
			
		        if (file == NULL)
				printf("\nerror opening %s\n", filename);
	    }

	    if (file != NULL)
		fputc(buffer[0], file);
	    
	buffer[0] = buffer[1];
	buffer[1] = buffer[2];
	buffer[2] = buffer[3];
    }
    
    if (file != NULL)
	    fclose (file);
    return 0;
};

Attachment: signature.asc
Description: Digital signature


Reply to: