Pergunta

Eu tenho uma função que obtém um arquivo zip e o extrai para um diretório (eu uso Dotnetzip biblioteca.)

public void ExtractFileToDirectory(string zipFileName, string outputDirectory)
{
     ZipFile zip = ZipFile.Read(zipFileName);
     Directory.CreateDirectory(outputDirectory);
     zip.ExtractAll(outputDirectory,ExtractExistingFileAction.OverwriteSilently);
}

Meu arquivo zip contém vários arquivos e diretórios. Mas quero extrair apenas alguns desses arquivos, não todos eles.

Como posso fazer isso funcionar?

Foi útil?

Solução

Você precisa testar cada um Zipentry Para ver se você deseja extraí -lo:

public void ExtractFileToDirectory(string zipFileName, string outputDirectory)
{
     ZipFile zip = ZipFile.Read(zipFileName);
     Directory.CreateDirectory(outputDirectory);
      foreach (ZipEntry e in zip)
      {
        // check if you want to extract e or not
        if(e.FileName == "TheFileToExtract") 
          e.Extract(outputDirectory, ExtractExistingFileAction.OverwriteSilently);
      }
}

.

ZipFile zip = ZipFile.Read(zipFileName); //Runs in framework 4.5

Outras dicas

Dependerá qual versão do CCTiddly você está usando.

Dê uma olhada nos campos no banco de dados.Eu acho que você deve ser capaz de fazer a mudança apenas atualizando o campo de espaço de trabalho na tabela Tiddler, mas verifique se há outros campos armazenando o espaço de trabalho.

Quando você disse que corrompeu tudo da última vez, o que exatamente você quer dizer?

Você também pode usar o LINQ para selecionar quais entradas deseja extrair. Por exemplo:

using (var zip = ZipFile.Read(ArchiveToRead))
{
    var selection = from e in zip.Entries
        where System.IO.Path.GetFileName(e.FileName).StartsWith("C")
        select e;

    foreach (var e in selection)
        e.Extract(extractDir);
}

Claro que você pode usar quaisquer critérios de consulta que desejar no where cláusula.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top