Форум программистов, компьютерный форум CyberForum.ru

Написать небольшую прогу, которая понимает изменился ли бинарный файл или нет - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Приостановить выполнение цикла до совершения какого-то действия http://www.cyberforum.ru/cpp-beginners/thread1242042.html
Я пишу дурака. Нужно, чтобы действия походить, отбиться, подкинуть и т.д. происходили до того момента, пока кол-во карт в отбое не будет равно 36. Проблема в том, что программа зацикливается на этом моменте:do { Go(); Defence(); Throw_Card(); //... } while (retreat.Count < 36); я хочу на время приостановить выполнение этого цикла, пока количество карт,...
C++ Порекомендуйте библиотеку для работы с большими числами Добрый день. Нужна библиотека для работы с большими числами, в которой определены следующие операции: умножение, деление, разность, сумма, деление с остатком. Какую библиотеку можете порекомендовать? http://www.cyberforum.ru/cpp-beginners/thread1241958.html
Конвертирование из std::tcstring в TCHAR C++
Всем привет! Нужно перевести строку из std::tcstring в TCHAR. Как то сделать? пробовал через функцию .c_str() - не помогло
Как правильно сделать методы создания и удаления объектов в классах SymbString и DecString C++
Задача: Написать программу, демонстрирующую работу с объектами двух типов: SymbString и DecString, для чего создать систему соответствующих классов. Каждый объект должен иметь идентификатор (в виде произвольной строки символов) и одно или несколько полей для хранения состояния объекта (один класс является потомком другого). Клиенту (функции main) должны быть доступны следующие основные...
C++ Вывести строки, где есть слова, начинающиеся на букву а http://www.cyberforum.ru/cpp-beginners/thread1241915.html
#include <iostream> #include <fstream> using namespace std; int main(void) { setlocale (0,""); ifstream Fin; ofstream Fout; int p,len; string s,s1;
C++ Как на физическом уровне работает компоновщик в приведенном случае Всем привет! Уважаемые форумчане объясните мне, как, на физическом уровне, работает компоновщик в этом случае: //файл Class.h class Test { public: Test(); ~Test(); }; подробнее

Показать сообщение отдельно
Warezovvv
 Аватар для Warezovvv
9 / 9 / 2
Регистрация: 09.12.2012
Сообщений: 219
13.08.2014, 22:17     Написать небольшую прогу, которая понимает изменился ли бинарный файл или нет
Мне нужно написать небольшую прогу, которая понимает изменился ли бинарный файл или нет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <windows.h>
#include <string>
#include <iostream>
#include <fstream>
 
int main(int agrc, char** argv) 
{
    std::string fileName = "C:/GameDev/Safty Code challenger/OriginalFiles/house_24.bin";
    HFILE hFile;
    OFSTRUCT buffer;
    DWORD vwCounter;
    int     *virgRDWRbuff;
    BY_HANDLE_FILE_INFORMATION bhFileInformation;
 
    buffer.cBytes = sizeof buffer;
    hFile = OpenFile(fileName.c_str(), &buffer, OF_READ);
    if(hFile == HFILE_ERROR) 
    {
        std::cout << "No File : " <<fileName <<std::endl;
        CloseHandle(HANDLE(hFile));
    }
    //Теперь можно получить информацию о файле
    GetFileInformationByHandle(
        HANDLE(hFile),     // дескриптор файла
        &bhFileInformation //адрес структуры, в которой сохраняется информация
        );
    //Резервируем память для всего файла обычно размер файла
    //не больше  размера nFileSizeLow объявленного как DWORD
 
    int viSize = bhFileInformation.nFileSizeLow/sizeof(int);
    virgRDWRbuff = (int*) new int[viSize];
    //Сдвигаем указатель на нужный байт, конкретно здесь на начло.
    if(_llseek(hFile, 0*sizeof(int), 0) != (long) (0*sizeof(int)))
    {
        CloseHandle(HANDLE(hFile));
        std::cout<<"Error bad file " <<fileName <<std::endl;
        return -1;
    }
    if(!ReadFile(HANDLE(hFile),virgRDWRbuff,
        (DWORD)viSize*sizeof(int),&vwCounter,NULL))
    {
        //Здесь может быть сообщение об ошибке
    } else 
    {
        if(vwCounter == (DWORD)viSize*sizeof(int))
        {
            //Используем информацию
            int viRez=virgRDWRbuff[99];
        }
        else
        {
            //Здесь может быть сообщение об ошибке
        }
    }
 
    std::ofstream F;
 
    F.open("C:\\GameDev\\Safty Code challenger\\OriginalFiles\\result.txt", std::ios::app);
    
    //for(int i=0; i < 100; i++) {
    //  virgRDWRbuff[99-i]=i;
    //  F<<virgRDWRbuff[99-i];
    //}
    //
    //if(!WriteFile(HANDLE(F),virgRDWRbuff,
    //  (DWORD)viSize*sizeof(int),&vwCounter,NULL))
    //{
    //  //Здесь может быть сообщение об ошибке
    //}
    //else
    //{
    //  if(vwCounter == (DWORD)viSize*sizeof(int))
    //  {
    //      //Запись прошла успешно
 
    //  }else
    //  {
    //      //Здесь может быть сообщение об ошибке
    //  }
    //}
    //
 
 
 
    CloseHandle(HANDLE(hFile));
    delete[] virgRDWRbuff;
 
    return 0;
}
Открываю бинарник (по туторам делал). Но в конце концов не могу понять где хранится "контент" этого файла. Ну в текстовом все понятно,если 111.txt содержит "тут строка" то она и содержит эту строку о строке. Я хочу сделать следующее. Взять бинарник, вынуть из него весь его контент, захешировать, сохранить в текстовой файл типа - этот файл -этот хэш . Проверять по открытию. Все что закоменчено, жалки попытки записи в текстовый файл инфы о бинарнике

Добавлено через 1 час 23 минуты
Убрал винапи, переписал попроще. Работает. Выводит 16ричный код. Щас захэширую и создам лог. Буит работать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
// An unsigned char can store 1 Bytes (8bits) of data (0-255)
typedef unsigned char BYTE;
 
// Get the size of a file
long getFileSize(FILE *file)
{
    long lCurPos, lEndPos;
    lCurPos = ftell(file);
    fseek(file, 0, 2);
    lEndPos = ftell(file);
    fseek(file, lCurPos, 0);
    return lEndPos;
}
 
int main()
{
    const char *filePath = "C:\\GameDev\\Safty Code challenger\\OriginalFiles\\house_48.bin";   
    BYTE *fileBuf;          // Pointer to our buffered data
    FILE *file = NULL;      // File pointer
 
    // Open the file in binary mode using the "rb" format string
    // This also checks if the file exists and/or can be opened for reading correctly
    if ((file = fopen(filePath, "rb")) == NULL)
        cout << "Could not open specified file" << endl;
    else
        cout << "File opened successfully" << endl;
 
    // Get the size of the file in bytes
    long fileSize = getFileSize(file);
 
    // Allocate space in the buffer for the whole file
    fileBuf = new BYTE[fileSize];
 
    // Read the file in to the buffer
    fread(fileBuf, fileSize, 1, file);
 
    // Now that we have the entire file buffered, we can take a look at some binary infomation
    // Lets take a look in hexadecimal
    std::ofstream result;
    result.open("C:\\GameDev\\Safty Code challenger\\OriginalFiles\\result.txt",std::ios::app);
    
 
    char hexstr[201];
    int i;
    for (i = 0; i < 100; i++)
        sprintf(hexstr+i*2, "%02x", fileBuf[i]);
        //printf("%X ", fileBuf[i]);
    hexstr[i*2] = 0;
    result << string(hexstr);   
    
    result.close();
    delete[]fileBuf;
    fclose(file);   // Almost forgot this 
    return 0;
}
Добавлено через 2 часа 13 минут
Но в первом листинге, где все таки лежит заветная информация?

Добавлено через 2 часа 41 минуту
ап.Рили нужна помощь
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru