Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637

Подправить функцию main, так, чтобы вместо директории можно было передавать путь к файлу

14.05.2015, 17:46. Показов 1080. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Ребята помогите подправить функцию main , так, что бы в место директории можно было передавать путь к файлу.
Сейчас реализовано, что в командной строке нужно передавать путь к папке (директории) пример C:\proba, а мне надо что бы можно было передать C:\proba\proba.exe

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
using namespace System;
using namespace System::IO;
using namespace System::Security::Cryptography;
 
// Print the byte array in a readable format.
void PrintByteArray( array<Byte>^array )
{
   int i;
   for ( i = 0; i < array->Length; i++ )
   {
      Console::Write( String::Format( "{0:X2}", array[ i ] ) );
      if ( (i % 4) == 3 )
            Console::Write( " " );
 
   }
   Console::WriteLine();
}
 
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   if ( args->Length < 2 )
   {
      Console::WriteLine( "Usage: hashdir <directory>" );
      return 0;
   }
 
   try
   {
 
      // Create a DirectoryInfo object representing the specified directory.
      DirectoryInfo^ dir = gcnew DirectoryInfo( args[ 1 ] );
 
      // Get the FileInfo objects for every file in the directory.
      array<FileInfo^>^files = dir->GetFiles();
 
      // Initialize a SHA256 hash object.
      SHA256 ^ mySHA256 = SHA256Managed::Create();
      array<Byte>^hashValue;
 
      // Compute and print the hash values for each file in directory.
      System::Collections::IEnumerator^ myEnum = files->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         FileInfo^ fInfo = safe_cast<FileInfo^>(myEnum->Current);
 
         // Create a fileStream for the file.
         FileStream^ fileStream = fInfo->Open( FileMode::Open );
 
         // Compute the hash of the fileStream.
         hashValue = mySHA256->ComputeHash( fileStream );
 
         // Write the name of the file to the Console.
         Console::Write( "{0}: ", fInfo->Name );
 
         // Write the hash value to the Console.
         PrintByteArray( hashValue );
 
         // Close the file.
         fileStream->Close();
      }
      return 0;
   }
   catch ( DirectoryNotFoundException^ ) 
   {
      Console::WriteLine( "Error: The directory specified could not be found." );
   }
   catch ( IOException^ ) 
   {
      Console::WriteLine( "Error: A file in the directory could not be accessed." );
   }
 
}
Добавлено через 14 минут
Вот как я смог
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
#include "stdafx.h"
 
using namespace System;
using namespace System::IO;
using namespace System::Security::Cryptography;
 
// Print the byte array in a readable format.
void PrintByteArray( array<Byte>^array )
{
   int i;
   for ( i = 0; i < array->Length; i++ )
   {
      Console::Write( String::Format( "{0:X2}", array[ i ] ) );
      if ( (i % 4) == 3 )
            Console::Write( " " );
 
   }
   Console::WriteLine();
}
 
int main()
{
  array<String^>^args = Environment::GetCommandLineArgs();
   if ( args->Length < 2 )
   {
      Console::WriteLine( "Usage: hashdir <directory>" );
      return 0;
   }
 
   try
   {
 
      // Initialize a SHA256 hash object.
      SHA256 ^ mySHA256 = SHA256Managed::Create();
      array<Byte>^hashValue;
 
         FileStream^ fileStream = gcnew FileStream( args[ 1 ] ,FileMode::Open);
         // Compute the hash of the fileStream.
         hashValue = mySHA256->ComputeHash( fileStream );
 
         // Write the name of the file to the Console.
         Console::Write( "{0}: ", args[ 1 ] );
 
         // Write the hash value to the Console.
         PrintByteArray( hashValue );
 
         // Close the file.
         fileStream->Close();
      
      return 0;
   }
   catch ( DirectoryNotFoundException^ ) 
   {
      Console::WriteLine( "Error: The directory specified could not be found." );
   }
   catch ( IOException^ ) 
   {
      Console::WriteLine( "Error: A file in the directory could not be accessed." );
   }
}
но результат подсчета разный.
в первом случает рассчитывает правильно = 5596cf0a7fa9b635e29cc4a8a9350a664f3c83c4 41563d1624d45f04c987f39a
а во втором нет = E3B0C44298FC1C149AFBF4C8996FB92427AE41E4 649B934CA495991B7852B855

В чем может быть ошибка, что я делаю не так.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2015, 17:46
Ответы с готовыми решениями:

Модифицировать программу так, чтобы можно было передавать функцию в виде делегата
Модифицировать программу нахождения минимума функции так, чтобы можно было передавать функцию в виде делегата. Сделать меню с различными...

Как сделать так чтобы можно было менять путь к БД
OleDbConnection aConn = new OleDbConnection(&quot;Provider=Microsoft.ACE.OLEDB.12.0;&quot; + @&quot;Data Source = C:\Users\Компьютер\Desktop\ИС...

Как правильно указать путь к файлу Word-шаблону чтобы проект можно было запускать с других компьютеров?
Подскажите пожалуйста!!! Как правильно указать путь к файлу Word-шаблону(по которому строится отчет из бд) чтобы проект можно было...

9
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
14.05.2015, 17:57
Перепроверил ваш код - ошибок и изменений, меняющих значение не вижу. Единственная идея - вы подсчитали хэш для разных файлов. Первый код вычисляет хэш для всех файлов в папке по порядку, а там могут быть и другие файлы, скрытые например.
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
14.05.2015, 18:01  [ТС]
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Единственная идея - вы подсчитали хэш для разных файлов. Первый код вычисляет хэш для всех файлов в папке по порядку, а там могут быть и другие файлы, скрытые например.
Там нет ни каких скрытых файлов. там только один файл.
Самое интересное в том, что если считать хеш содержимого (например скопировать всё, и вести в какой нибудь онлайн считатель) то сумма одна, а если передать сам файл то сумма другая (правильная). Может нужно как то переводить в Byte и считать.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
14.05.2015, 18:52
Перепроверил у себя на компьютере, хэш верный, именно 5596c...
Код немного упростил
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
#include "stdafx.h"
using namespace System;
using namespace System::IO;
using namespace System::Security::Cryptography;
 
void PrintByteArray(array<Byte>^ array) {
    for (int i = 0; i < array->Length; i++) {
        Console::Write(String::Format("{0:X2}", array[i]));
        if ((i % 4) == 3)
            Console::Write(" ");
    }
    Console::WriteLine();
}
 
int main(array<System::String ^> ^args) {
    if (args->Length < 1) {
        Console::WriteLine("Filename missing.");
        return 1;
    }
 
    SHA256^ mySHA256 = SHA256Managed::Create();
    {
        try {
            FileStream^ fileStream = gcnew FileStream(
                args[0],
                FileMode::Open);
            array<Byte>^ hashValue = mySHA256->ComputeHash(fileStream);
            PrintByteArray(hashValue);
            fileStream->Close();
        }
        catch (FileNotFoundException^ ex) {
            Console::WriteLine("File not found");
            return 1;
        }
    }
    return 0;
}
Миниатюры
Подправить функцию main, так, чтобы вместо директории можно было передавать путь к файлу  
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
14.05.2015, 19:04  [ТС]
А, что у меня так считает VS 2008
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
14.05.2015, 19:11
Dr.Xank, вы попробовали мной предложенный код? Сомневаюсь, что это зависит от версии.
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
14.05.2015, 19:50  [ТС]
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Dr.Xank, вы попробовали мной предложенный код? Сомневаюсь, что это зависит от версии.
Все отлично работает. Ошибка была в то, что файл для подсчета был на диске C:\ . Взял стдругой директории посчиталось всё верно.

Добавлено через 5 минут
У меня к вам еще не большая просьба будет Вы не мог ли бы написать .длл и выложить мне.
Там надо в основном одну функцию. тип bool. Если сумма просчиталась, то true. А исходник вместе с длл выложить здесь.

Заранее благодарен
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
14.05.2015, 20:06
Цитата Сообщение от Dr.Xank Посмотреть сообщение
Если сумма просчиталась, то true
Поподробнее пожалуйста. Какая сумма? И почему у вас это не получается?
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
14.05.2015, 21:40  [ТС]
Не много поторопился, и написал не подумав.
Надо этот код занести в .длл. Желательно в одну функцию. Что бы принимал параметр *wchar_t()имя файла ( или, что то в этом роде), и возвращала результат данной функции тоже в *char или *wchar_t
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Какая сумма?
сумма SHA256 результат расчета, что выводит функция PrintByteArray()
Цитата Сообщение от tezaurismosis Посмотреть сообщение
И почему у вас это не получается?
Я в основном программирую в C++Builder.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
14.05.2015, 21:59
Цитата Сообщение от Dr.Xank Посмотреть сообщение
Я в основном программирую в C++Builder.
Да я не про это спрашивал, в студии же есть проект библиотеки C++/CLI, нужно просто код скопировать.
Вот либа, но она скомпилирована в VS2013 и на версиях старше может не заработать, так что проект прилагается
Вложения
Тип файла: zip FileHashLibrary.zip (1.88 Мб, 1 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2015, 21:59
Помогаю со студенческими работами здесь

Изменить программу вывода функции так, чтобы можно было передавать функции типа double
Помогите разобраться. Изменить программу вывода функции так, чтобы можно было передавать функции типа double(double,double)....

Как можно cделать так чтобы при вызове функции GetFolder() меню выбора директории становилось автоматически на задаваемый путь?
Подскажите пожалуйста как можно cделать так чтобы при вызове функции GetFolder() меню выбора директории становилось автоматически на...

как сделать так, чтобы в поле dbgrid можно было отмечать галочками знвачение, вместо true и false?
имеется таблица в бд, одно из полей этой таблицы имеет значение истина или ложь. В приложении вывожу таблицу, но не знаю как сделать так...

Определить функцию-член в наследнике так, чтобы её можно было вызвать только по ссылке на базовый класс
Пусть дан абстрактный класс A class A { public: void virtual method() const = 0; }; Определите класс B - наследник от...

Как передать в функцию два односвязных списка так, чтобы внутри функции можно было эти списки редактировать?
Мне нужно редактировать в функции два односвязных списка, как их передать в функцию, один получается, два не понимаю как сделать....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru