saveFileDialog 生成 2 个文件而不是 1 个?
saveFileDialog generates 2 file instead 1?
我不明白为什么这会生成 2 个文件而不是一个:
具有相同的名称,但一个(可以)具有正确的扩展名 (extension
) 并且是 xxxxBytes,而另一个没有扩展名(文件类型是)并且是 0Bytes。
Stream my1Stream;
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((my1Stream = saveFileDialog1.OpenFile()) != null)
{
fileout = saveFileDialog1.FileName + extension;
passwordBytes = GetPasswordBytes();
my1Stream.Close();
AES.EncryptFile(filein, fileout, passwordBytes);
MessageBox.Show("File Criptato!");
}
}
扩展源自 filein
(在 OpenFileDialog 中)并以以下形式声明:private string extension
:
filein = openFileDialog1.FileName;
extension = Path.GetExtension(filein);
您之所以感到困惑,主要是因为您启用了资源管理器选项 "Hide extensions for known file types"。如果您正在处理文件,请立即禁用它。
此外,my1Stream = saveFileDialog1.OpenFile()
实际上创建了文件,但您永远不会写入 my1Stream
。这将创建第一个具有正确扩展名的 0 字节文件。
然后是下面的代码:
fileout = saveFileDialog1.FileName + extension;
AES.EncryptFile(filein, fileout, passwordBytes);
写入第二个文件,具有双扩展名。
如果您的 AES 库(或您从中复制 AES.EncryptFile()
的任何地方)不支持写入流,只需删除 if ((my1Stream = saveFileDialog1.OpenFile()) != null)
和扩展内容。 SaveFileDialog.FileName
是否 包含扩展名:
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
fileout = saveFileDialog1.FileName;
passwordBytes = GetPasswordBytes();
AES.EncryptFile(filein, fileout, passwordBytes);
MessageBox.Show("File Criptato!");
}
来自 SaveFileDialog.OpenFile 方法的 MSDN 页面
For security purposes, this method creates a new file with the
selected name and opens it with read/write permissions. This can cause
unintentional loss of data if you select an existing file to save to
所以这一行
if ((my1Stream = saveFileDialog1.OpenFile()) != null)
创建一个具有所选名称且字节数为零的文件。然后您的代码继续在 AES.Encryptfile 调用中创建文件,名称为 fileOut
你可以简单地写
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
fileout = saveFileDialog1.FileName;
passwordBytes = GetPasswordBytes();
AES.EncryptFile(filein, fileout, passwordBytes);
MessageBox.Show("File Criptato!");
}
我不明白为什么这会生成 2 个文件而不是一个:
具有相同的名称,但一个(可以)具有正确的扩展名 (extension
) 并且是 xxxxBytes,而另一个没有扩展名(文件类型是)并且是 0Bytes。
Stream my1Stream;
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((my1Stream = saveFileDialog1.OpenFile()) != null)
{
fileout = saveFileDialog1.FileName + extension;
passwordBytes = GetPasswordBytes();
my1Stream.Close();
AES.EncryptFile(filein, fileout, passwordBytes);
MessageBox.Show("File Criptato!");
}
}
扩展源自 filein
(在 OpenFileDialog 中)并以以下形式声明:private string extension
:
filein = openFileDialog1.FileName;
extension = Path.GetExtension(filein);
您之所以感到困惑,主要是因为您启用了资源管理器选项 "Hide extensions for known file types"。如果您正在处理文件,请立即禁用它。
此外,my1Stream = saveFileDialog1.OpenFile()
实际上创建了文件,但您永远不会写入 my1Stream
。这将创建第一个具有正确扩展名的 0 字节文件。
然后是下面的代码:
fileout = saveFileDialog1.FileName + extension;
AES.EncryptFile(filein, fileout, passwordBytes);
写入第二个文件,具有双扩展名。
如果您的 AES 库(或您从中复制 AES.EncryptFile()
的任何地方)不支持写入流,只需删除 if ((my1Stream = saveFileDialog1.OpenFile()) != null)
和扩展内容。 SaveFileDialog.FileName
是否 包含扩展名:
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
fileout = saveFileDialog1.FileName;
passwordBytes = GetPasswordBytes();
AES.EncryptFile(filein, fileout, passwordBytes);
MessageBox.Show("File Criptato!");
}
来自 SaveFileDialog.OpenFile 方法的 MSDN 页面
For security purposes, this method creates a new file with the selected name and opens it with read/write permissions. This can cause unintentional loss of data if you select an existing file to save to
所以这一行
if ((my1Stream = saveFileDialog1.OpenFile()) != null)
创建一个具有所选名称且字节数为零的文件。然后您的代码继续在 AES.Encryptfile 调用中创建文件,名称为 fileOut
你可以简单地写
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
fileout = saveFileDialog1.FileName;
passwordBytes = GetPasswordBytes();
AES.EncryptFile(filein, fileout, passwordBytes);
MessageBox.Show("File Criptato!");
}