0

请看下面的代码

void InformationWriter::writeContacts(System::String ^phone, System::String ^email)
{
    try
    {
        //Write the file
        StreamWriter ^originalTextWriter = gcnew StreamWriter("contacts.dat",false);
        originalTextWriter->WriteLine(phone);
        originalTextWriter->WriteLine(email);
        originalTextWriter->Close();


        //Encrypt the file
        FileStream ^fileWriter = gcnew FileStream("contacts.dat",FileMode::OpenOrCreate,FileAccess::Write);

        DESCryptoServiceProvider ^crypto = gcnew DESCryptoServiceProvider();

        crypto->Key = ASCIIEncoding::ASCII->GetBytes("Intru235");
        crypto->IV = ASCIIEncoding::ASCII->GetBytes("Intru235");

        CryptoStream ^cStream = gcnew CryptoStream(fileWriter,crypto->CreateEncryptor(),CryptoStreamMode::Write);


        //array<System::Byte>^ phoneBytes = ASCIIEncoding::ASCII->GetBytes(phone);
        FileStream ^input = gcnew FileStream("contacts.dat",FileMode::Open); //Open the file to be encrypted
        int data = 0;

        while((data=input->ReadByte()!=-1))
        {
            cStream->WriteByte((System::Byte)data);
        }

        input->Close();
        cStream->Close();
        fileWriter->Close();

        System::Windows::Forms::MessageBox::Show("Data Saved");
    }
    catch (IOException ^e)
    {
        System::Windows::Forms::MessageBox::Show(e->Message);
    }


}

执行以下部分时,出现错误

FileStream ^input = gcnew FileStream("contacts.dat",FileMode::Open); //Open the file to be encrypted

以下是我得到的错误

在此处输入图像描述

这是我第一次使用CryptoStream,我也是 C++/CLI 的新手。

4

1 回答 1

2
FileStream ^fileWriter = gcnew FileStream("contacts.dat",FileMode::OpenOrCreate,FileAccess::Write);

// snip

FileStream ^input = gcnew FileStream("contacts.dat",FileMode::Open); //Open the file to be encrypted

您打开文件两次,一次用于输入,一次用于输出。您在这里有几个选择:

  1. 在启用共享的情况下打开文件,允许您打开它两次。
  2. 打开文件,将整个文件读入内存,关闭文件,然后打开文件输出并进行加密。
  3. 打开一个临时文件进行输出,将所有数据写入那里,然后在原始文件的顶部重命名临时文件。
于 2013-08-22T15:53:07.743 回答