これが私のプログラムのメソッドです
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
プログラムの最初の実行時に、tempという名前のフォルダーがプログラムの場所(PRL \ temp)に作成されます。アプリケーションを閉じて再度実行した後、最初のステップで作成された一時ディレクトリは空ではありません。むしろ、lblAddressは値G:\tempを示します。実際には存在しません。
次に、G:\ tempフォルダーを明示的に作成し、その中に追加のファイルとフォルダーを配置しました。テスト目的で、プログラムはG:\ tempからすべてのファイルとフォルダーを削除し、PRL\tempはすべてのコンテンツと同じままです。
実際、私のプログラムは一時フォルダーの場所、つまりPRL \ tempを、そのフォルダー内のコンテンツを抽出するメソッドに渡します。すべての実行で、コンテンツは常にPRL\tempに抽出されます。ただし、フォルダが存在する場合、G:\tempのコンテンツは失われます。
また、最初の実行時にデバッグを行っていたときに、条件ステートメントが実行されず、プログラムが正しい場所、つまりPRL \ tempにフォルダーを作成した場合、PRLに一時ディレクトリが存在しないためです。ファイルとフォルダが間違ったフォルダであるかどうかがチェックされるだけですG:\ temp
これまで、フォルダがすでに存在するなどの例外は発生していません。
また、「\ temp」を「temp」に変更すると、すべてが正しい場所、つまりPRL\tempで発生することに気付きました。真ん中にG:\tempはありません。私のプログラムは正常に動作します。しかし、私はそれが奇妙だと思い、誰かがそれを説明できれば幸いです。ありがとう、そしてそれが非常にばかげた質問であるならば申し訳ありませんが、これはIOでの私の最初の経験のいくつかです。
unzipmethosを呼び出すメソッドは次のとおりです。
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はバッファサイズであり、関係ありません。