Shell32 CopyHere メソッドに問題があります。
まず、このページから作業しています: http://www.codeproject.com/Tips/257193/Easily-zip-unzip-files-using-Windows-Shell32
VB.NET でほとんど作業したことがないという理由だけで、C# で似たようなものを書き直したいと思っていました。
テストとして、1 つのテキスト ファイルを含む入力ディレクトリ i を渡します。下部に、実際にファイルを取得していることを確認するために、input.Items() のカウントを書き込み、1 を取得したので、1 つのテキスト ファイルを含むディレクトリが表示されていると思います。ただし、私のコードは空の zip ファイルを正常に作成し、少なくともそのコンソール出力からファイルを取得しているように見えますが、実際には zip ファイルに何もコピーしません。エラーはスローされません。何も起こらないかのようです。
static void Zip(string i, string o)
{
//Turn relative paths into full paths for Shell.NameSpace method.
string ifp = Path.GetFullPath(i);
string ofp = Path.GetFullPath(o);
//Validate parameters.
if (!(Directory.Exists(ifp)) || (Directory.GetFiles(ifp).Count() <= 0))
throw new Exception("Input directory " + i + " was invalid. " + i + " was either empty or doesn't exist.");
string ext = ofp.Substring(ofp.Length - 4, 4);
if (ext != ".zip")
throw new Exception("Output zip directory " + o + " was invalid. File extension was " + ext + " when it should be .zip.");
if (File.Exists(ofp))
throw new Exception("Output zip directory " + o + " was invalid. Zip file already exists.");
//The following data represents an empty zip file.
byte[] startBuffer = { 80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
//Create empty zip file.
File.WriteAllBytes(ofp, startBuffer);
if (!File.Exists(ofp))
throw new Exception("Output zip directory " + o + " was unable to be created.");
Shell sc = new Shell();
//Folder which contains the files you want to zip.
Folder input = sc.NameSpace(ifp);
//Empty zip file as folder.
Folder output = sc.NameSpace(ofp);
//Copy the files into the empty zip file.
output.CopyHere(input.Items(), 4);
Console.WriteLine(input.Items().Count);
}
Shell32 メソッドの使用方法に何か問題がありますか?
編集:
返信が遅くなってすみません。DJ Kraze が作成したコードの一部を使用しようとしています。
いくつかのことを明確にするために、残念ながらサードパーティのツールを使用できず、.NET 4.0 を使用しています。DJ のアドバイスを受けて、VB バージョンまたは彼が親切に投稿した C# のいずれかが機能するかどうかを確認します。
みんな助けてくれてありがとう。