Программа для .iso файлов с открытым исходным кодом для windows
Посоветуйте софт для работы с iso образами, которые имеют открытый исходный код
ДополненПрограмма нужна только для монтирования. Инструменты по работе с оптическими дисками не интересуют
На Windows 7 использую https://pcprogs.net/36-ultraiso.html
Для Windows 8 и 10 никакая программа для монтирования образов не нужна. Образ в виртуальный привод монтируется по правому клику мыши на файле образа -> Подключить.
И бесплатные программы далеко не всегда бывают с открытыми исходниками, да тебе они и не нужны. Для Win7 и младше рекомендую архиватор HaoZIp, в который встроена и утилита виртуальных приводов. По клику правой кнопкой мыши на образе выбираешь Монтировать образ диска.
https://cloud.mail.ru/public/3JvM/Tk3ipykmG
Так все функции давно описаны и расписаны.
Например:
#include
#include
#include
const unsigned int SECTOR_SIZE = 2048; //размер сектора для CD
#ifdef _WIN32
#include
void GetDiskMetrics(const char* disk, unsigned int* pBlockSize, uint64_t* pTotalSize){
char path[MAX_PATH]="";
strcpy(path,disk);
strcat(path,":\\");
unsigned long dwSectorsPerCluster, dwBytesPerSector, dwNumberOfFreeClusters, dwTotalNumberOfClusters;
unsigned int blocksize;
uint64_t totalsize;
//найдем размер сектора и объем данных на диске
int res = GetDiskFreeSpaceA(path, &dwSectorsPerCluster, &dwBytesPerSector,
&dwNumberOfFreeClusters, &dwTotalNumberOfClusters);
//вычислим размер блока, кратный размеру сектора, и общий объем данных в байтах
if (res){
blocksize = dwBytesPerSector * 20;
totalsize = dwSectorsPerCluster * dwBytesPerSector * (uint64_t)dwTotalNumberOfClusters;
}
else{
printf("GetDiskFreeSpace error %d", GetLastError());
blocksize = SECTOR_SIZE * 20;
totalsize = 4700307456; //DVD
}
*pBlockSize = blocksize;
*pTotalSize = totalsize;
}
bool OpenDevice(const char* disk, void** phFile){
char path[MAX_PATH]="";
sprintf(path,"\\\\.\\%s:",disk); //формат имени файла для открытия тома
//открываем том для прямого доступа на чтение
HANDLE handle = CreateFileA(path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (handle == INVALID_HANDLE_VALUE) {
fprintf(stderr,"CreateFileA error %d", GetLastError());
return false;
}
else {
*phFile = handle;
return true;
}
}
bool ReadDevice(void* hFile, void* lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead){
BOOL res = ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, NULL);
if (res == FALSE){
fprintf(stderr,"ReadFile error %d", GetLastError());
return false;
}
else return true;
}
void CloseDevice(void* hFile){
CloseHandle(hFile);
}
#endif
void CreateISO(const char* disk, const char* outfile){
char* buf;
unsigned long dwRead = 0;
uint64_t count = 0;
unsigned int blocksize;
uint64_t totalsize;
GetDiskMetrics(disk,&blocksize,&totalsize);
buf = (char*)malloc(blocksize);
//открываем том для прямого доступа на чтение
void* handle=NULL;
bool res = OpenDevice(disk,&handle);
if (res == false) goto End;
//открываем файл для записи
FILE* target = fopen(outfile,"wb");
while (true){
dwRead = 0;
memset(buf,0,blocksize);
//считаем блок данных
res = ReadDevice(handle,buf, blocksize, &dwRead);
if (res == false) goto End;
if (dwRead == 0) break; //конец считывания
count += dwRead;
printf(" Creating image: %5.1f%% [%10.2f KB / %10.2f KB]\r",
(count * 100.0f / totalsize),
(count / 1024.0f),
(totalsize / 1024.0f));
//запишем блок в файл
fwrite(buf,dwRead,1,target);
}
End: CloseDevice(handle);
fclose(target);
free(buf);
printf("\n");
}
int main(int argc, char **argv)
{
CreateISO("K", "c:\\distr\\image.iso");
getchar();
return 0;
}
Источник: https://ru.stackoverflow.com/questions/1054552/qt-c-Создание-iso-образа
для работы? В смысле создания образов? Просто для их открытия вообще ничего не нужно. Сама винда уже официально поддерживает монтирование образов без сторонних программ.