如何删除为普通I/O打开的文件?
我想解密文件.如果代码不正确,那么我需要删除输出文件.
我不能用,File.Delete()因为:
Windows NT 4.0平台注意:删除不会删除为普通I/O打开的文件或内存映射的文件.
try
{
FileStream fsIn = new FileStream(fileIn, FileMode.Open, FileAccess.Read, FileShare.Delete);
FileStream fsOut = new FileStream(fileOut, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Delete);
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76});
Rijndael alg = Rijndael.Create();
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
CryptoStream cs = new CryptoStream(fsOut, alg.CreateDecryptor(), CryptoStreamMode.Write);
int bufferLen = 4096;
byte[] buffer = new byte[bufferLen];
int bytesRead;
do
{
bytesRead = fsIn.Read(buffer, 0, bufferLen);
cs.Write(buffer, 0, bytesRead);
} while (bytesRead != 0);
cs.Close();
fsIn.Close();
return true;
}
catch(Exception)
{
MessageBox.Show("Incorrect code :(");
return false;
}
Run Code Online (Sandbox Code Playgroud)
有人知道如何删除输出文件?
答案已经在你的问题中了.
删除不会删除为正常I/O打开的文件.
因此,关闭该文件,然后您可以删除它.
您还应该将文件流包装在using块中,以确保以及时和可预测的方式整理非托管资源.像这样:
using (FileStream fsIn = new FileStream(...))
{
....
}
Run Code Online (Sandbox Code Playgroud)
这是确保文件在完成后关闭的最佳方法.您可以File.Delete在using阻止后拨打电话.
最后,我很确定你不想使用FileShare.Delete.例如,在您的输入文件上,允许其他进程在您对其进行操作时删除该文件.您想要FileShare.Read在您正在阅读FileShare.None的文件上以及您正在编写的文件上.
| 归档时间: |
|
| 查看次数: |
817 次 |
| 最近记录: |