如何获取字节数组中包含的文件数?

时间:2013-03-27 07:51:19

标签: c#

我正在使用ICSharpCode.SharpZipLib.Core库来压缩我的C#代码中的文件。压缩后,我将返回一个字节数组。有什么方法可以找到字节数组中的文件数量吗?

我的代码看起来像

string FilePath ="C:\HELLO";
 MemoryStream outputMemStream = new MemoryStream();
            ZipOutputStream zipStream = new ZipOutputStream(outputMemStream);
            foreach (var file in files)
            {
                FileInfo fi = new FileInfo(string.Concat(FilePath, file));
                if (fi.Exists)
                {
                    var entryName = ZipEntry.CleanName(fi.Name);
                    ZipEntry newEntry = new ZipEntry(entryName);
                    newEntry.DateTime = DateTime.Now;
                    newEntry.Size = fi.Length;
                    zipStream.PutNextEntry(newEntry);

                    byte[] buffer = new byte[4096];
                    var fs = File.OpenRead(string.Concat(FilePath, file));
                    var count = fs.Read(buffer, 0, buffer.Length);
                    while (count > 0)
                    {
                        zipStream.Write(buffer, 0, count);
                        count = fs.Read(buffer, 0, buffer.Length);  
                    }
                }
            }
            zipStream.Close();
            byte[] byteArrayOut = outputMemStream.ToArray();
            return byteArrayOut;

3 个答案:

答案 0 :(得分:2)

字节数组就是它 - 一个字节序列。通过查看字节数组来了解“文件数”是不可能的。你需要解压缩字节数组。

但是,当您在压缩时循环遍历一组文件时,可以很容易地为每个已处理的文件增加变量并返回该变量。

要考虑评论,可能更容易使用out参数而不是Tuple

numFiles = 0;    // This is an out parameter to the method
foreach (var file in files)
{
    FileInfo fi = new FileInfo(string.Concat(FilePath, file));
    if (fi.Exists)
    {
        numFiles++;
        ...
    }
}

...
return byteArrayOut;

答案 1 :(得分:0)

您可以使用2个属性返回对象:压缩字节数组和文件数。 另外,使用string.Format(或Path.Combine)而不是string.Concat

答案 2 :(得分:0)

http://msdn.microsoft.com/en-us/library/system.io.directory.getfiles(v=vs.80).aspx

使用

var filesCount = 0;

方法

filesCount = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Length 

之前的