Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637

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

14.05.2015, 17:46. Показов 1090. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru