ZipOutputStream は既存のエントリにデータ ファイルを追加しますか?
こんにちは、asp.net c#、Framework 4.0
Ionic.Zip を使用して圧縮データ ファイル (アップローダー ハンドラー) を飛ばします。
大きなファイルをアップロードします。
ファイルが完全なコンテンツ(チャンクではない)をアップロードした場合-OKですが、ファイルがチャンクでアップロードされた場合...問題が発生します。
すべてのチャンク アップロード ファイルをアーカイブに追加するにはどうすればよいですか (1 つのファイル - 1 つのエントリ)。ファイル自体のドライブを保存せずに。
私の英語でごめんなさい。
私のコードの一部:
長さ = 現在のチャンクで一時ファイルを作成します
using (FileStream fs = new FileStream(Path.Combine(pathToCreate, "chunkfile"), FileMode.Create))
{
buffer = new byte[fileUpload.InputStream.Length];
fileUpload.InputStream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, buffer.Length);
}
zip エントリを取得します。
using (ZipFile zipfile = ZipFile.Read(fullpath))
{
if (zipfile.ContainsEntry(fileName))
{
zipflag = true;
}
}
Entry が存在する場合 - データを追加し、存在しない場合は新規作成:
if (!zipflag)
{
using (ZipFile zipfile = ZipFile.Read(fullpath))
{
using ( FileStream input = new FileStream (Path.Combine(pathToCreate, "chunkfile"), FileMode.Open, FileAccess.Read))
{
using (FileStream output = new FileStream(fullpath, FileMode.Create, FileAccess.Write))
{
using (ZipOutputStream zipout = new ZipOutputStream(output))
{
buffer = new byte[input.Length];
zipout.PutNextEntry(fileName);
int size;
do
{
size = input.Read(buffer, 0, buffer.Length);
zipout.Write(buffer, 0, size);
} while (size > 0);
}
}
}
}
}
else
{
buffer = FileArray(Path.Combine(pathToCreate, "chunkfile"));
AppendAllBytes(fullpath, buffer);
}
}
public static void AppendAllBytes(string path, byte[] bytes)
{
using (var stream = new FileStream(path, FileMode.Append))
{
using (ZipOutputStream zipout = new ZipOutputStream(path))
{
zipout.Write(bytes, 0, bytes.Length);
}
}
}
private byte[] FileArray(string filename)
{
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
// Create a byte array of file stream length
byte[] datachunk = new byte[fs.Length];
//Read block of bytes from stream into the byte array
fs.Read(datachunk, 0, System.Convert.ToInt32(fs.Length));
//Close the File Stream
fs.Close();
return datachunk; //return the byte data
}
この文字列を変数化します。Zip ファイルへのフル パスです。
そして使用しようとしています:
using (var stream = new FileStream(path, FileMode.Append))
{
ZipFile zipfile = ZipFile.Read(path);
using (StreamReader sr = new StreamReader(path))
{
var zn = zipfile.UpdateEntry(fileName, bytes);
sr.Close();
sr.Dispose();
}
}
影響なし、ファイルは更新されません。
助けてください。