我在WinForm项目里创建了一个线程Thread threadE = new Thread(new ThreadStart(EncryptFile));,用这个线程对文件进行加密,加密方法如下:
其中,sKeyE为用户设定的密码,sInputFilenameE为被加密的文件的路径,sOutputFilenameE为加密成功后文件的路径。
private void EncryptFile()
{
//设定初始向量
byte[] MyDESIV ={ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
byte[] MyDESKey ={ };
if (sKeyE.Length == 6)
{
MyDESKey = new byte[] { (byte)sKeyE[0], (byte)sKeyE[1], (byte)sKeyE[2], (byte)sKeyE[3], (byte)sKeyE[4], (byte)sKeyE[5], 0x07, 0x08 };
}
else if (sKeyE.Length == 7)
{
MyDESKey = new byte[] { (byte)sKeyE[0], (byte)sKeyE[1], (byte)sKeyE[2], (byte)sKeyE[3], (byte)sKeyE[4], (byte)sKeyE[5], (byte)sKeyE[6], 0x07 };
}
else if (sKeyE.Length >= 8)
{
MyDESKey = new byte[] { (byte)sKeyE[0], (byte)sKeyE[1], (byte)sKeyE[2], (byte)sKeyE[3], (byte)sKeyE[4], (byte)sKeyE[5], (byte)sKeyE[6], (byte)sKeyE[7] };
}
try
{
//创建输入和输出文件流
FileStream MyInFileStream = new FileStream(sInputFilenameE, FileMode.Open, FileAccess.Read);
FileStream MyOutFileStream = new FileStream(sOutputFilenameE, FileMode.OpenOrCreate, FileAccess.Write);
MyOutFileStream.SetLength(0);
//每次的中间流.
byte[] InsertData = new byte[1024];
//代表已经加密流的大小
int CompletedLength = 0;
//代表要加密文件总的大小
long InFileSize = MyInFileStream.Length;
//创建DES对象
DES MyDES = new DESCryptoServiceProvider();
//创建加密流
CryptoStream EncryptStream = new CryptoStream(MyOutFileStream, MyDES.CreateEncryptor(MyDESKey, MyDESIV), CryptoStreamMode.Write);
//从输入文件中读取流,然后加密到输出文件中
while (CompletedLength < InFileSize)
{ //每次写入加密文件的数据大小
int Length = MyInFileStream.Read(InsertData, 0, 1024);
EncryptStream.Write(InsertData, 0, Length);
CompletedLength = CompletedLength + Length;
}
//关闭流
EncryptStream.Close();
MyOutFileStream.Close();
MyInFileStream.Close();
MessageBox.Show("文件加密已经操作成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
//return false;
}
finally
{
threadE.Abort();
}
}问题是:现在我想用一个ProgressBar反映文件加密的进度,请问在哪里添加代码,应该怎么写,我知道会用到delegate,请高手指点。
其中,sKeyE为用户设定的密码,sInputFilenameE为被加密的文件的路径,sOutputFilenameE为加密成功后文件的路径。
private void EncryptFile()
{
//设定初始向量
byte[] MyDESIV ={ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
byte[] MyDESKey ={ };
if (sKeyE.Length == 6)
{
MyDESKey = new byte[] { (byte)sKeyE[0], (byte)sKeyE[1], (byte)sKeyE[2], (byte)sKeyE[3], (byte)sKeyE[4], (byte)sKeyE[5], 0x07, 0x08 };
}
else if (sKeyE.Length == 7)
{
MyDESKey = new byte[] { (byte)sKeyE[0], (byte)sKeyE[1], (byte)sKeyE[2], (byte)sKeyE[3], (byte)sKeyE[4], (byte)sKeyE[5], (byte)sKeyE[6], 0x07 };
}
else if (sKeyE.Length >= 8)
{
MyDESKey = new byte[] { (byte)sKeyE[0], (byte)sKeyE[1], (byte)sKeyE[2], (byte)sKeyE[3], (byte)sKeyE[4], (byte)sKeyE[5], (byte)sKeyE[6], (byte)sKeyE[7] };
}
try
{
//创建输入和输出文件流
FileStream MyInFileStream = new FileStream(sInputFilenameE, FileMode.Open, FileAccess.Read);
FileStream MyOutFileStream = new FileStream(sOutputFilenameE, FileMode.OpenOrCreate, FileAccess.Write);
MyOutFileStream.SetLength(0);
//每次的中间流.
byte[] InsertData = new byte[1024];
//代表已经加密流的大小
int CompletedLength = 0;
//代表要加密文件总的大小
long InFileSize = MyInFileStream.Length;
//创建DES对象
DES MyDES = new DESCryptoServiceProvider();
//创建加密流
CryptoStream EncryptStream = new CryptoStream(MyOutFileStream, MyDES.CreateEncryptor(MyDESKey, MyDESIV), CryptoStreamMode.Write);
//从输入文件中读取流,然后加密到输出文件中
while (CompletedLength < InFileSize)
{ //每次写入加密文件的数据大小
int Length = MyInFileStream.Read(InsertData, 0, 1024);
EncryptStream.Write(InsertData, 0, Length);
CompletedLength = CompletedLength + Length;
}
//关闭流
EncryptStream.Close();
MyOutFileStream.Close();
MyInFileStream.Close();
MessageBox.Show("文件加密已经操作成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
//return false;
}
finally
{
threadE.Abort();
}
}问题是:现在我想用一个ProgressBar反映文件加密的进度,请问在哪里添加代码,应该怎么写,我知道会用到delegate,请高手指点。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货