yschmitzz Posted May 30, 2012 at 03:20 AM Report #459046 Posted May 30, 2012 at 03:20 AM É 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??
petvetbr Posted May 30, 2012 at 04:16 AM Report #459047 Posted May 30, 2012 at 04:16 AM (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 May 30, 2012 at 04:17 AM by petvetbr Fernando Lage Bastos - MCP/MCTS/MCPD
yschmitzz Posted May 30, 2012 at 04:37 AM Author Report #459048 Posted May 30, 2012 at 04:37 AM 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"); }
petvetbr Posted May 31, 2012 at 02:14 AM Report #459311 Posted May 31, 2012 at 02:14 AM 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. 1 Report Fernando Lage Bastos - MCP/MCTS/MCPD
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now