1

ライブラリを使用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;
4

3 に答える 3

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;
于 2013-03-27T08:00:07.490 に答える
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 

ジップ前

于 2013-03-27T08:06:55.290 に答える
0

圧縮されたバイト配列とファイル数の 2 つのプロパティを持つオブジェクトを返すことができます。また、string.Concat の代わりに string.Format (または Path.Combine) を使用します。

于 2013-03-27T08:00:25.083 に答える