Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Recovers JPEGS from memory card
- #include <cs50.h>
- #include <stdio.h>
- int main(int argc, char *argv[])
- {
- // ensure proper usage
- if (argc ==! 2)
- {
- fprintf(stderr, "Usage: recovery file\n");
- return 1;
- }
- // remember memory file name
- char *memfile = argv[1];
- // open memory card
- FILE* memcard = fopen(memfile, "r");
- if (memcard == NULL)
- {
- fprintf(stderr, "Could not open %s.\n", memfile);
- return 2;
- }
- // temporary storage
- int buffer[512 * sizeof(int)];
- int bytes_read;
- int img_count = 0;
- char filename[8];
- FILE* img = NULL;
- // until the end of the memory file
- do
- {
- // read from memory file
- bytes_read = fread(buffer, 1, 512, memcard);
- int x = buffer[0];
- int c = img_count;
- // determine if start of a new jpeg
- if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
- {
- // determine if already found a jpeg
- if (img)
- {
- // close previous jpeg
- fclose(img);
- // increment jpeg counter
- img_count++;
- // start writing a new jpeg
- sprintf(filename, "%03i.jpg", img_count);
- img = fopen(filename, "w");
- fwrite(buffer, 1, 512, img);
- }
- else
- {
- // increment jpeg counter
- img_count++;
- // start writing a new jpeg
- sprintf(filename, "%03i.jpg", img_count);
- img = fopen(filename, "w");
- fwrite(buffer, 1, 512, img);
- }
- }
- else
- {
- // if already found jpeg, write those bytes to current jpeg
- if (img)
- {
- fwrite(buffer, 1, 512, img);
- }
- }
- }
- while (bytes_read == 512);
- // close memory file
- fclose(memcard);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement