我在使用 Shell32 CopyHere 方法时遇到了一些问题。
首先,我从这个页面工作:http: //www.codeproject.com/Tips/257193/Easily-zip-unzip-files-using-Windows-Shell32
我希望用 C# 重写类似的东西,因为我几乎没有在 VB.NET 中工作过。
我正在传递一个输入目录 i ,其中包含一个文本文件作为我的测试。在底部,我看到它实际上是在抓取我的文件,我写了 input.Items() 的计数并得到 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#。
感谢大家的帮助。