SPLIT DE ARQUIVOS

TAMANINI 15/03/2010 10:09:16
#336977
Boa noite, pessoal.

Estou com um problema em um cliente no qual estou enviando no e-mail dele um arquivo zip quebrado em 3 partes.
O problema é que o anti-vírus do cliente acaba sempre excluindo o 1º arquivo, enquanto as outras partes acaba recebendo, sendo que chega apenas um anexo txt com a seguinte mensagem:
[Ô]EmpresaXXX[ô]s virus protection has replaced attachment [Ô]anexo.zip0[Ô] with this text message. The original file was unscannable and was deleted.[Ô]
Alguém já passou por esse problema? A princípio eu acredito que o anti-vírus não consegue escanear este 1º arquivo por falta de algum cabeçalho nesse arquivo.
Segue abaixo o método que estou utilizando para fazer o split do arquivo, só estou utilizando classes do próprio .NET para isso:



FileStream fsIn = new FileStream(fileName, FileMode.Open, FileAccess.Read);



string basePath = System.IO.Path.GetDirectoryName(fileName);



int fileSize = (int) fsIn.Length;

int segments = (int) (fileSize / m_segmentSize);

int remainder = (int) (fileSize % m_segmentSize);

if (remainder > 0) segments++;

byte[] buffer = new byte[blockSize];



for (int i = 0; i < segments; i++)
{

FileStream fsOut = new FileStream(fileName + [Ô].[Ô] + i, FileMode.Create,FileAccess.Write);

int blocks = (int) (m_segmentSize / blockSize);



if ( remainder > 0 && i < segments - 1)
{
for ( int j = 0; j < blocks ; j++)
{

//probably should just check the int ret value then write those blocks
// then if the ret value < 1024, just write the remainder & exit
fsIn.Read(buffer, 0, blockSize);

fsOut.Write(buffer, 0, blockSize);
}

}
else
{
int finalBlocks = (int) (remainder / blockSize);

int lastBlock = (int) (remainder % blockSize);

for (int k = 0; k < finalBlocks; k++)
{

fsIn.Read(buffer, 0, blockSize);
fsOut.Write(buffer,0,blockSize);

}

fsIn.Read(buffer, 0, lastBlock);

fsOut.Write(buffer, 0, lastBlock);
}

fsOut.Flush();

fsOut.Close();

}

fsIn.Close();


Obs.: No caso, estou enviando cada arquivo em e-mails separados. E a versão que estou utilizando é .NET 1.1.
E para gerar o arquivo ZIP estou utilizando a dll SharpZipLib. Até tentei verificar se está dll tem algum método que faz split, mas não encontrei. Se alguém souber, melhor ainda.
WEBMASTER 15/03/2010 10:30:56
#336980
Resposta escolhida
Sendo bem claro, o que tem nesse arquivo quebrado eh binario ou texto ?
Se for texto, ele (antivirus) pode estar interpretando codigo e realmente sacando fora, o ideal seria voce criptografar o arquivo assim ele nao vai ter barramentos...
TAMANINI 15/03/2010 13:28:52
#337004
é um arquivo zip, que contém arquivos pdf. Eu já tentei enviar diretamente um pdf quebrado em duas partes e o anti-vírus barrou também. Mas é sempre a 1ª parte que é barrada, as partes seguintes acabam chegando no cliente. Pela mensagem dá a entender que o anti-vírus não conseguiu escanear e por isso excluiu:
[Ô]EmpresaXXX[ô]s virus protection has replaced attachment [Ô]anexo.zip0[Ô] with this text message. The original file was unscannable and was deleted.[Ô]

No caso, o anti-vírus está lendo a 1ª parte que tem o cabeçalho e nisso ele verifica que o tamanho não bate com o tamanho original, enquanto as outras partes são apenas dados binários, não contendo nenhum cabeçalho, o anti-vírus acaba deixando passar, é isso ou viajei?

Se eu enviar o arquivo zip completo, ou seja, sem estar quebrado, o cliente recebe. O problema é que preciso quebrar quando o arquivo ultrapassada 2MB.
TAMANINI 15/03/2010 14:28:49
#337011
Isso sem chance, tem que ter uma outra alternativa. Estou fazendo um teste para ver se consigo em enviar o arquivo zip quebrado, mas gerado pelo aplicativo 7-zip.
WEBMASTER 15/03/2010 14:50:15
#337015
Ta, entao vamos pensar...
Zipa ele em um so arquivo e usa um algoritmo de divisao do conteudo em partes (aqui no site tem exemplos disso), voce vai fazer o split na mao, mas o conteudo nao seria barrado pois voce ja tem ele como ZIP passando pelo AV.

So de curiosidade, que raios de AV ta pegando isso ?
TAMANINI 16/03/2010 12:44:12
#337081
Hum, não entendi por que o conteudo não vai ser barrado.
Se for dividir o arquivo zip em partes utilizando a classe FileStream não funciona, pois é o que estou fazendo atualmente.
Se eu enviar o arquivo zip completo sem fazer o split funciona.

Quanto AV, tb estou curioso, o cliente está verificando para mim desde ontem. Pelo que ele sabe, são 3 AV, no qual eventualmente são alternados na verificação dos e-mails.
WEBMASTER 16/03/2010 14:08:10
#337089
Entao experimenta uma coisa...
Faz o split dos arquivos como voce esta fazendo e passa um base64 ou outro tipo de encriptacao para o arquivo e veja que o AV ainda barra, to suspeitando que ele esta lendo um comeco de cabecalho, vendo que nao tem fim e achando que isso eh virus. Outra coisa eh tentar com RAR para ver o que da (sei que voce esta fazendo via codigo, mas experimenta so para ver se encontra outra maneira de quebrar compactado para enviar)
Tópico encerrado , respostas não são mais permitidas