아무도 다음 코드가 작동하지 않는 이유를 말해 줄 수 있습니까? Zip 스트림 용으로 SharpZipLib API를 사용하고 있으며, 현재 사이트에서 최신 버전 인 DL을 다운로드했습니다. 디스크에 입출력을 수행 할 필요없이 한 zip 파일의 내용을 다른 zip 파일로 병합하려면이 논리를 사용하십시오. 의도 한 zip 파일에는 Windows 용 예약 파일 이름이 들어있을 수 있습니다. 여러 개의 다른 원본 및 대상 zip 파일 (예약 된 이름과 그 포함되지 않은 파일)을 시도했습니다. 코드는 예외를 발생시키지 않으며 각 쓰기 작업 전에 버퍼를 검사하면 실제 데이터가 포함되어 있음을 알 수 있지만 전체 작업이 완료된 후 대상 zip 파일의 크기는 변경되지 않고 탐색 할 수 있습니다 새로운 파일 (코드가 추가하는 파일)이 실제로 대상 파일에 추가되지 않았는지 확인합니다. 내가 볼 :(다른 Zip 파일로 압축을 풉니 다
public static void CopyToZip(string inArchive, string outArchive)
{
ZipOutputStream outStream = null;
ZipInputStream inStream = null;
try
{
outStream = new ZipOutputStream(File.OpenWrite(outArchive));
outStream.IsStreamOwner = false;
inStream = new ZipInputStream(File.OpenRead(inArchive));
ZipEntry currentEntry = inStream.GetNextEntry();
while (currentEntry != null)
{
byte[] buffer = new byte[1024];
ZipEntry newEntry = new ZipEntry(currentEntry.Name);
newEntry.Size = currentEntry.Size;
newEntry.DateTime = currentEntry.DateTime;
outStream.PutNextEntry(newEntry);
int size = 0;
while ((size = inStream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, size);
}
outStream.CloseEntry();
currentEntry = inStream.GetNextEntry();
}
outStream.IsStreamOwner = true;
}
catch (Exception e)
{
throw e;
}
finally
{
try { outStream.Close(); }
catch (Exception ignore) { }
try { inStream.Close(); }
catch (Exception ignore) { }
}
}
여기 게시 한 코드를 작성하기 위해 예제를 따라했습니다. 위의 코드가 대상 zip 파일의 상태를 전혀 변경하지 않는 경우 덮어 쓰기 여부에 관계없이이 시점에서 중요하지 않습니다. 덮어 쓰는 경우, 적어도 디버깅 할 것이 있습니다 ... 나는 memeory 스트림을 사용할 필요가 없습니다. 내가 '디스크를 사용하지 않고'라는 말은 하드 드라이브에 하나의 압축 파일 내용을 추출 할 수 없다는 것입니다. 그런 다음 다른 압축 파일로 다시 압축합니다. Windows 파일 이름 지정 규칙 때문에 HD에서 압축을 풀지 않고도 한 우편 번호에서 다음 우편 번호로 이동해야합니다. –
File.OpwnWrite()의 새 FileStream (outArchive, FileMode.Open)이 사용되었습니다. 그것은 결과를 전혀 변경하지 못했습니다. –