Jump to content

Comparando 2 arquivo Byte a Byte (Cliente e servidor)


Recommended Posts

Posted

É o seguinte, estou tentando comparar 2 arquivos, 1 que esta no meu computador e outro que esta em um site (o site esta hospedado no meu computador mesmo

criei um arquivo de texto que visualiza todos os arquivos que quero comparar e coloquei no site (update.txt)

nele contem as linhas:

/system/l2.ini

/system/itemname-e.dat

entao linha a linha desse bloco de notas e compara o primeiro arquivo do site com o do computador, e assim por diante

using System;
using System.IO;
using System.Net;

namespace ConsoleApplication1
{
class Program
{
 static WebClient Client;
 public static void comparateFile(String file, String file2)
 {	
	 byte[] Arquivo1 = File.ReadAllBytes(file);
	 byte[] Arquivo2 = File.ReadAllBytes(file2); //aqui esta o problema
	 if (BitConverter.ToString(Arquivo1) == BitConverter.ToString(Arquivo2))
	 {
		 Console.WriteLine("igual");
	 }
	 else
	 {
		 Console.WriteLine("Diferente");
	 }


 }
 static void Main(string[] args)
 {
	 Client = new WebClient();
	 Stream update = Client.OpenRead("http://localhost:8090/UPDATES/update.txt");
	 StreamReader sr = new StreamReader(update);
	 String arquivo = sr.ReadLine();


	 while (arquivo != null)
	 {
		 String client = "C:/l2" + arquivo;
		 String servidor = "C:/xampp/htdocs/UPDATES" + arquivo;[u][i][b] //aqui esta o problema[/b][/i][/u]
		 comparateFile(client, servidor);
		 arquivo = sr.ReadLine();
	 }
	 Console.ReadLine();
 }
}
}
 

o problema é que comparando 2 arquivo q está no meu computador ele funciona legal, mas nao posso colocar no lugar de "C:/xampp/htdocs/UPDATES" o endereço http://localhost:8090/UPDATES porque da erro

alguem pode me da uma ajuda nesse problema??

Posted (edited)

Você não vai conseguir ler arquivos diretamente de uma url usando HTTP com o FileReader. Para ler via HTTP, você deve usar o WebClient, baixar o arquivo utilizando por exemplo o método DownloaData e só então fazer a comparação. O FileReader e outros componentes do sistema IO, são para acesso a sistemas de arquivos convencionais como drives, compartilhamentos de rede, etc... Para fazer estas operações via Web com http, você deve utilizar o webclient.

Edited by petvetbr

Fernando Lage Bastos - MCP/MCTS/MCPD

Posted

entao eu tenho que baixar o arquivo parar fazer a comparação?? nao tem como eu comparar ele online?

mas me tira uma duvida, baixar o arquivo, e comparar online (se possivel) teria alguma diferença no tempo, ou os 2 demorariam o mesmo tempo?

pq ja vi sistema de auto update q quando vc abre o programa, ele faz uma verificação de uns 4 ... 6 segundos, e se vc alterar 1 arquivo (nunk testei parar ve se era QUALQUER arquivo ou alguns) ele baixava novamente o arquivo, mas oq eu axei estranho, é que mesmo na verificação no meu pc, um arquivo de 20 mb demora uns 8 segundos, como q entao um programa de 3 gb consegue ser todo verificado, online em menos de 10 segundos caso nao tenha alteração???

e caso nao tenha essa opção automatica, vc clica no botao para checar posiveis alterações nos arquivos, ou a falta de arquivos, os arquivos alterados ele baixa novamente, e nos arquivos que vc ja tem, e quando nao esta alterado ele nao baixa (durando meno de 1 segundo para comparar e ver que nao tem alteração, independente do tamanho)

a verificação q eu faço e byte a byte, tentei linha a linha ma dura o mesmo tempo, sera q eles fazem uma verificação menos detalhada?? se sim, sabe como?

o codigo que eu fiz linha a linha fico desse geito, nao creio q o while esteja lerdalizando o systema

String[] Arquivo1 = File.ReadAllLines(file);
			String[] Arquivo2 = File.ReadAllLines(file2);
			int x = 0;
			while (x < Arquivo2.Length) {
				if (Arquivo1[x] == Arquivo2[x]) {
					igual = true;
				} else{
					igual = false;
				}
				x++;
			}
			if (igual == true) {
				Console.WriteLine("Igual");
			} else {
			Console.WriteLine("diferente");
			}
Posted

entao eu tenho que baixar o arquivo parar fazer a comparação?nao tem como eu comparar ele online?

sim, precisa, não tem como fazer uma verificacao byte a byte sem baixar os bytes primeiro.

mas me tira uma duvida, baixar o arquivo, e comparar online (se possivel) teria alguma diferença no tempo, ou os 2 demorariam o mesmo tempo?

a comparacão de ambos demora a mesma coisa. O que demora mais é baixar o arquivo online. Uma vez no seu computador, não tem porque existir diferença.

Quanto a questão que você mencionou de auto atualização, existem formas muito mais rápidas de ver isto. Algumas alternativas:

1) O site da empresa de software publica em algum lugar (ex: webservice, ou até mesmo uma página HTML), a versão atual do software. O software que roda na máquina do cliente, entra em contato com o site da empresa, e verifica se a versão atual é a mesma que a dele. Se não for avisa o usuário que há uma atualização disponível

2) Para comparar arquivos diretamente, sem precisar ficar publicando versões, alguns lugares utilizam uma técnica chamada hash, o que este sistema permite é gerar uma "assinatura" gerada por um algorítimo feito para isto. Se o arquivo por exemplo mudar 1 byte que seja, a assinatura gerada pelo hash já se torna completamente diferente. O que se faz então é comparar o hash dos arquivos, se não forem iguais é praticamente certeza que são diferentes. Um hash típico tem coisa de 40-120bytes, então é algo muito rápido de ser transmitido e comparado.

  • Vote 1

Fernando Lage Bastos - MCP/MCTS/MCPD

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.