Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

образ диска

7.0K
15 декабря 2009 года
Rusd
88 / / 26.08.2006
Хотел снять образ флэшки, но где-то ошибся - читает только первые 140-350 байт (в зависимости от устройства).
Пробовал размеры буфера указывать 128,512,1024,4096
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

const unsigned int bufSize = 1024;

int main(int argc, char** argv)
{
    FILE* disk = fopen("\\\\.\\L:","r");
    char buf[bufSize];
    if (disk == NULL)
    {
        printf("Can't open disk\n");
        getch();
        return -1;
    }
    FILE* image = fopen("D:\\Image.file","w+");
    if (image == NULL)
    {
        printf("Can't open file for image\n");
        getch();
        return -1;
    }
    unsigned int i = 0;
    unsigned int count = 0;
    while (/*!feof(disk)*/count = fread(&buf,1,bufSize,disk))
    {
        //system("cls");
        printf("%u bytes\n",bufSize*i+count);
        fwrite(&buf,1,count,image);
        i++;
    }
    fclose(disk);
    fclose(image);
    printf("Done. Press any key.\n");
    getch();
    return 1;
}
260
15 декабря 2009 года
Ramon
1.1K / / 16.08.2003
Вы открываете диск как текстовый, не бинарный, файл.
7.0K
15 декабря 2009 года
Rusd
88 / / 26.08.2006
Разобрался.
Спасибо.
7.0K
16 декабря 2009 года
Rusd
88 / / 26.08.2006
Вопрос "в догонку"
Как открыть флэшку для записи образа? ... или может где-то в другом месте ошибка

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


const unsigned int bufSize = 524288;//4096;

int main(int argc, char** argv)
{
    //FILE* disk = fopen("\\\\.\\L:","rb");
    FILE* disk = fopen("D:\\temp\\flash\\image.file","rb");
    char buf[bufSize];
    if (disk == NULL)
    {
        printf("Can't open file to read\n");
        getch();
        return -1;
    }
    //FILE* image = fopen("D:\\Image.file","w+");
    FILE* image = fopen("\\\\.\\I:","ab");
    if (image == NULL)
    {
        printf("Can't open file to write\n");
        getch();
        return -1;
    }
    fseek(image,0,SEEK_SET);
    unsigned int i = fseek(image,0,SEEK_SET);
    unsigned int count = 0;
    unsigned int countw = 0;
    int pos1 = 0,pos2 = 0;
    while (/*!feof(disk)*/count = fread(&buf,1,bufSize,disk))
    {
        system("cls");
        printf("%u B | %u KB | %.2f MB\n",bufSize*i+count,
                                        int(float(bufSize*i+count)/(float)1024),
                                        float(bufSize*i+count)/(float)1024/1024);
        pos1 = fseek(image,0,SEEK_CUR);
        if ((countw = fwrite(&buf,1,count,image)) != count)
        {
            printf("Error during writing occured\n");
            printf("Tryeid to write: %d Bytes, but done: %d Bytes",count,countw);
            fclose(disk);
            fclose(image);
            getch();
            return -1;
        };
        pos2 = fseek(image,0,SEEK_CUR);
        printf("pos1: %d, pos2: %d\n",pos1,pos2);
        if (pos1 == pos2) fseek(image,count,SEEK_CUR);
        if (fflush(image) != 0)
        {
            printf("Error during flushing occured\n");
            fclose(disk);
            fclose(image);
            getch();
            return -1;
        };
        i++;
    }
    fclose(disk);
    fclose(image);
    printf("Done. Press any key.\n");
    getch();
    return 1;
}


fopen("\\\\.\\I:","w") и fopen("\\\\.\\I:","wb") возвращают NULL
Записывается около полутора мегабайт и появляется ошибка (countw != count)
7
16 декабря 2009 года
@pixo $oft
3.4K / / 20.09.2006
А WinAPI пользовать можно?Если что,могу подсказать
7.0K
17 декабря 2009 года
Rusd
88 / / 26.08.2006
Можно :) Через CreateFile, ReadFile, WriteFile из windows.h заработало как надо.
Интересно, почему через стандартные "сишные" функции не вышло.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог