这是我的程序中的一个方法
public partial class Form1 : Form
{
DirectoryInfo tempdirectory = new DirectoryInfo(@"\temp");
const string DEFAULT_ADDRESS_TEXT = "<click load button to load a file>";
private void Form1_Load(object sender, EventArgs e)
{
lblAddress.Text = DEFAULT_ADDRESS_TEXT;
if (Directory.Exists(tempdirectory.Name))
{
lblAddress.Text = tempdirectory.FullName;
foreach (DirectoryInfo dir in tempdirectory.GetDirectories())
{
dir.Delete(true);
}
foreach (FileInfo file in tempdirectory.GetFiles())
{
file.Delete();
}
}
Directory.CreateDirectory(tempdirectory.Name);
lblAddress.Text = tempdirectory.Name;
}
}
程序运行位置( PRL )--> G:\Users\\Documents\Visual Studio 2010\Projects\Comics Project\ZipEntryDemo2\ZipEntryDemo2\bin\Debug
在程序的第一次运行中,在程序位置 (PRL\temp) 会创建一个名为 temp 的文件夹。关闭应用程序并再次运行后,第一步创建的临时目录不为空;而是 lblAddress 显示值 G:\temp ;实际上甚至不存在。
然后我明确地创建了一个文件夹 G:\temp 并在其中放置了一些额外的文件和文件夹,出于测试目的,程序现在从 G:\temp 中删除所有文件和文件夹,并且 PRL\temp 仍然与所有内容保持原样。
实际上,我的程序将临时文件夹的位置,即 PRL\temp 传递给一个方法,该方法在该文件夹中提取它的内容。在每次运行中,内容总是在 PRL\temp 中提取;但 G:\temp 的内容会丢失,前提是该文件夹存在。
还有一个特殊的事情是,当我在第一次运行时调试时,因为临时目录在 PRL 中不存在,如果条件语句不执行并且程序在正确的位置创建一个文件夹,即 PRL\temp。只是检查了文件和文件夹是否有错误的文件夹 G:\temp
到目前为止,我没有收到任何异常,例如文件夹已经存在或任何类型。
我还注意到,如果我将“\temp”更改为“temp”,现在所有事情都发生在正确的位置,即 PRL\temp;并且中间没有 G:\temp 。我的程序运行良好。但我觉得这很奇怪,如果有人能解释一下,我将不胜感激。谢谢,对不起,如果这是一个非常愚蠢的问题,这是我第一次接触 IO 的经历。
调用解压缩方法的方法是
private void btnLoad_Click(object sender, EventArgs e)
{
OpenFileDialog f = new OpenFileDialog();
f.Filter = "Zip Files(*.zip)|*.zip";
f.Multiselect = false;
if (f.ShowDialog() == DialogResult.OK)
{
unzip(f.FileName, tempdirectory.Name, 4096);
}
}
这里 tempDirectory.Name 被传递给 unzip 函数,它不会在该方法中被操纵。4096 是缓冲区大小,无关紧要。