Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <cs50.h>
- int main(int argc, char *argv[])
- {
- // ensure proper usage
- if (argc != 2)
- {
- fprintf(stderr, "Usage: recover imagefile\n");
- return 1;
- }
- // remember filenames
- char *imagefile = argv[1];
- bool control = true;
- //bool jpegfound = false;
- int imagenumber = 0;
- char filenamestring[50] = "000.jpg";
- bool writingjpg = false;
- //int secondimagecount=0;
- //char buffer[4];
- //we only open this guy up once.
- FILE *fileinputpointer = fopen(imagefile, "r");
- //FILE *outptr = fopen(filenamestring, "w");//making an assumption 1 or more jpeg headers will be found. In this non-real world example, this assumption is justified.
- FILE *outptr;
- if (fileinputpointer == NULL)
- {
- fprintf(stderr, "Could not open image file %s.\n", imagefile);
- return 2;
- }
- while(control)
- {
- unsigned char buffer[512];//re-initialize as blank
- int bytesreturned = fread(&buffer,512,1,fileinputpointer);
- //if(new header found and imagenumber > 0)
- if(buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
- //if(buffer[0] == (unsigned char)0xff && buffer[1] == (unsigned char)0xd8 && buffer[2] == (unsigned char)0xff && (buffer[3] & (unsigned char)0xf0) == (unsigned char)0xe0)
- {
- //Update the filename. Make a new pointer with new filename.
- sprintf(filenamestring,"%03d.jpg", imagenumber);
- printf("this is filenamestring:\n%s\n",filenamestring);
- if(writingjpg)//imagenumber > 0
- {
- fclose(outptr);
- printf("closing file output pointer\n");
- outptr = fopen(filenamestring, "w"); //idk when to initialize
- imagenumber++;
- }
- else
- {
- writingjpg = true;
- //now is when we open new file open pointer
- outptr = fopen(filenamestring, "w"); //idk when to initialize
- fwrite(&buffer,512,1,outptr);//read from buffer,write to FILE*
- }
- if (outptr == NULL)
- {
- fclose(fileinputpointer);
- fprintf(stderr, "Could not create %s.\n", filenamestring);
- return 3;
- }
- }//end of "if header found"
- else//if header was not found
- {
- if(writingjpg)//imagenumber > 0
- {
- fwrite(&buffer,512,1,outptr);//read from buffer,write to FILE*
- }
- }
- //we write the things we just read to outpointer to the file--
- //because we hit EOF, it's time to close the file.
- if(bytesreturned != 1 )//1 chunk of 512 bytes
- {
- //we hit eof
- control = false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement