Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# saveFileDialog生成2个文件而不是1个文件?_C#_Savefiledialog - Fatal编程技术网

C# saveFileDialog生成2个文件而不是1个文件?

C# saveFileDialog生成2个文件而不是1个文件?,c#,savefiledialog,C#,Savefiledialog,我不明白为什么这会生成两个文件而不是一个: 具有相同的名称,但其中一个(可以)具有正确的扩展名(扩展名),为xxxxBytes,而另一个没有扩展名(文件类型为),为0Bytes Stream my1Stream; SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; saveFileDialog1

我不明白为什么这会生成两个文件而不是一个: 具有相同的名称,但其中一个(可以)具有正确的扩展名(
扩展名
),为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);

造成您困惑的主要原因是启用了资源管理器选项“隐藏已知文件类型的扩展名”。如果您正在处理文件,请立即禁用该选项

此外,
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!");
}

造成您困惑的主要原因是启用了资源管理器选项“隐藏已知文件类型的扩展名”。如果您正在处理文件,请立即禁用该选项

此外,
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页面

出于安全目的,此方法使用 选择名称并以读/写权限打开它。这可能导致 如果选择要保存到的现有文件,则会意外丢失数据

所以这条线

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!");
}

从SaveFileDialog.OpenFile方法上的MSDN页面

出于安全目的,此方法使用 选择名称并以读/写权限打开它。这可能导致 如果选择要保存到的现有文件,则会意外丢失数据

所以这条线

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!");
}