2013-09-15 4 views
1

Очень новый для C# - переход от действительно администратора в Powershell и Java. Я использую функцию MS для дешифрования файлов:Функция доступна во всех Win Forms

static void DecryptFile(string sInputFilename, string sOutputFilename, string sKey) 
    { 
     DESCryptoServiceProvider DES = new DESCryptoServiceProvider(); 
     //A 64 bit key and IV is required for this provider. 
     //Set secret key For DES algorithm. 
     DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey); 
     //Set initialization vector. 
     DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey); 

     //Create a file stream to read the encrypted file back. 
     FileStream fsread = new FileStream(sInputFilename, 
      FileMode.Open, 
      FileAccess.Read); 
     //Create a DES decryptor from the DES instance. 
     ICryptoTransform desdecrypt = DES.CreateDecryptor(); 
     //Create crypto stream set to read and do a 
     //DES decryption transform on incoming bytes. 
     CryptoStream cryptostreamDecr = new CryptoStream(fsread, 
      desdecrypt, 
      CryptoStreamMode.Read); 
     //Print the contents of the decrypted file. 
     StreamWriter fsDecrypted = new StreamWriter(sOutputFilename); 
     fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd()); 
     fsDecrypted.Flush(); 
     fsDecrypted.Close(); 
    } 

И в тот момент, я вызываю его в различных кнопок с помощью во всех различных формах:

 string decryptionKey = File.ReadAllText(@"C:\ThickClient\secretKey.skey"); 
     DecryptFile("C:\\ThickClient\\Encrypted.enc", "C:\\ThickClient\\tempPWDump.enc", decryptionKey); 
     string decryptedPW = File.ReadAllText(@"C:\ThickClient\tempPWDump.enc"); 
     File.Delete(@"C:\ThickClient\tempPWDump.enc"); 

И я имею определить static void DecryptFile {code} в каждой Форме и называть его новой переменной в каждой форме, чтобы использовать ее. Кажется сумасшедшим, где в формах Windows я могу определить его и установить глобальную переменную, чтобы она была доступна для каждой формы?

+0

сделать PUBLIC статическим классом Decrypter? – Fredrik

+0

Где это определено, в любой форме? И это для переменной или функции? – PnP

+0

см. Отличный ответ Shadow Wizard ниже. Просто будьте осторожны с глобальными (aka, public) переменными, которые вы хотите добавить. Должны ли формы знать/устанавливать тип кодирования? скорее всего, нет, они должны (я бы предпочел) просто иметь возможность вызвать метод Decrypt() общедоступного (глобального) класса и позволить этому позаботиться о деталях. – Fredrik

ответ

5

Использовать открытый статический класс. Для этого щелкните правой кнопкой мыши проект и выберите «Добавить» → «Класс». В диалоговом окне введите имя, например «Utils.cs», и подтвердите. Измените код на что-то вроде этого:

public static class Utils 
{ 
    public static void DecryptFile(string sInputFilename, string sOutputFilename, string sKey) 
    { 
     //... 
    } 
} 

Теперь в любом месте проекта, в любой форме, вы можете иметь:

Utils.DecryptFile(...); 

В случае, если вы имеете несколько проектов, то становится немного сложнее, но все еще довольно простой. Просто поместите этот класс в новый проект типа Class Library и везде, где вам нужны утилиты, добавьте ссылку на этот проект.

На стороне записки, чтобы иметь переменную общедоступную просто добавить что-то вроде этого на класс выше: (известный как статический геттер)

private static string decryptedPW = ""; 
public static string DecryptedPW 
{ 
    get 
    { 
     //need to initialize? 
     if (decryptedPW.Length == 0) 
     { 
      string filePath = @"C:\ThickClient\tempPWDump.enc"; 
      decryptedPW = File.ReadAllText(filePath); 
      File.Delete(filePath); 
     } 
     return decryptedPW; 
    } 
} 

Затем к нему доступ из любого места в проекте:

string decryptedPW = Utils.DecryptedPW; 
+0

Как насчет глобальных переменных? – PnP

+1

А затем идите в C# книгу. – VahidNaderi

+0

@FrK не имеет значения, мы говорим о методе не переменных. Теоретически вы можете поместить метод в одну существующую форму и ссылаться на нее на другие, но это не очень хорошая практика. –

Смежные вопросы