2015-07-21 3 views
-1

Я использую C# в приложении формы Windows Visual Studio для написания программы, которая может шифровать и дешифровать файлы. Я следую этому пошаговому руководству: https://msdn.microsoft.com/en-US/library/Aa964697(v=VS.85).aspx и все выполнено с некоторыми незначительными изменениями, внесенными в мою среду и настройки.FileNotFoundException при использовании FileStream для шифрования

Когда я пытаюсь зашифровать файл, мне придается ошибка «FileNotFoundException была необработанной», когда программа пытается использовать файл для шифрования файла. Все, что до этого момента, похоже, работает.

Вот код для метода EncryptFile:

private void EncryptFile(string inFile) 
{ 
    // Create an instance of Rijndael for symmetric encryption of the data. 
    RijndaelManaged rjndl = new RijndaelManaged(); 
    rjndl.KeySize = 256; 
    rjndl.BlockSize = 256; 
    rjndl.Mode = CipherMode.CBC; 
    ICryptoTransform transform = rjndl.CreateEncryptor(); 

    // Use RSACryptoServiceProvider to enrypt the Rijndael key. 
    byte[] keyEncrypted = rsa.Encrypt(rjndl.Key, false); 

    // Create byte arrays to contain the length values of the key and IV. 
    byte[] LenK = new byte[4]; 
    byte[] LenIV = new byte[4]; 

    int lKey = keyEncrypted.Length; 
    LenK = BitConverter.GetBytes(lKey); 
    int lIV = rjndl.IV.Length; 
    LenIV = BitConverter.GetBytes(lIV); 

    // Write the following to the FileStream for the encrypted file (outFs): 
    // - length of the key 
    // - length of the IV 
    // - ecrypted key 
    // - the IV 
    // - the encrypted cipher content 

    // Change the file's extension to ".enc" 
    string outFile = EncrFolder + inFile.Substring(0, inFile.LastIndexOf(".")) + ".enc"; 

    using (FileStream outFs = new FileStream(outFile, FileMode.Create)) 
    { 
     outFs.Write(LenK, 0, 4); 
     outFs.Write(LenIV, 0, 4); 
     outFs.Write(keyEncrypted, 0, lKey); 
     outFs.Write(rjndl.IV, 0, lIV); 

     // Now write the cipher text using a CryptoStream for encrypting. 
     using (CryptoStream outStreamEncrypted = new CryptoStream(outFs, transform, CryptoStreamMode.Write)) 
     { 
      // By encrypting a chunk at a time, you can save memory and accommodate large files. 
      int count = 0; 
      int offset = 0; 

      // blockSizeBytes can be any arbitrary size. 
      int blockSizeBytes = rjndl.BlockSize/8; 
      byte[] data = new byte[blockSizeBytes]; 
      int bytesRead = 0; 

      using (FileStream inFs = new FileStream(inFile, FileMode.Open)) 
      { 
       do 
       { 
        count = inFs.Read(data, 0, blockSizeBytes); 
        offset += count; 
        outStreamEncrypted.Write(data, 0, count); 
        bytesRead += blockSizeBytes; 
       } 
       while (count > 0); 
       inFs.Close(); 
      } 
      outStreamEncrypted.FlushFinalBlock(); 
      outStreamEncrypted.Close(); 
     } 
     outFs.Close(); 
    } 
} 

ошибка происходит на линии "используя (FileStream inFs = новый FileStream (входной_файл, FileMode.Open))". Вот изображение ошибки:

enter image description here

Что вызывает ошибку, и что такое исправление?

+0

Я подозреваю, что проблема в том, что файл не был найден. Что таинственно? –

+0

Кроме того, при представлении исключений всегда публикуйте полное исключение, включая любые внутренние исключения. Только для устранения неполадок поймайте исключение (возможно, на верхнем уровне вашего метода), затем опубликуйте результат 'ex.ToString()'. –

+0

Прости меня, я новичок во всем этом. Я думаю, что моя проблема кажется простой, но я новичок в программировании и на этом сайте, поэтому у меня нет лучшего понимания всего. Когда я выбираю файл для шифрования, почему программа ищет файл в другом месте? Как у меня есть файл, в котором ожидается, что он будет просто выбрать файл, который будет использоваться из openfiledialog? –

ответ

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