none
Comparação de Arquivos em pasta error no caminho RRS feed

  • Pergunta

  • Ola!

    Estou tentando fazer uma função que compara os arquivos de 2 pastas e mostra os arquivos diferente porem esta dando erro no caminho do diretorio 

    erro: "Additional information: O acesso ao caminho 'C:\CLIENT\data' foi negado."

    codigo

    ArrayList arqFolder = getArquivosPath(@"C:\\CLIENT\");
                ArrayList arqFolder2 = getArquivosPath(@"C:\\Users\\J\\Desktop\\OT\\CLIENT TFS\");
                String[] myArr = (String[])arqFolder.ToArray(typeof(string));
                String[] myArr2 = (String[])arqFolder2.ToArray(typeof(string));
                int n = myArr.Length;
                string output = string.Empty;
                for (int i = 0; i <= n; i++)
                {
                    string Arquivo1 = myArr[i];
                    string Arquivo2 = myArr2[i];
    
                    byte[] myArray1 = File.ReadAllBytes(Arquivo1);
                    byte[] myArray2 = File.ReadAllBytes(Arquivo2);
    
                    if (BitConverter.ToString(myArray1) == BitConverter.ToString(myArray2))
                    {
                        
                    }
                    else
                    {
                        output += myArr2[i] + "\n";
                    }
                }
                MessageBox.Show(output);

    quinta-feira, 31 de dezembro de 2015 17:50

Respostas

  • Aparentemente teu array está nulo.

    Troque teu for por:

    for (Int32 i = 0; i < n; i++)

    Assim caso o tamanho do array seja 0, ele não irá executar o bloco de código.

    Caso não resolva, novamente peço: coloque o código do método getArquivosPath(), por gentileza.


    Att., Rafael Simor

    • Sugerido como Resposta SimorC sábado, 2 de janeiro de 2016 02:48
    • Marcado como Resposta Marcos SJ segunda-feira, 4 de janeiro de 2016 12:39
    sábado, 2 de janeiro de 2016 01:58

Todas as Respostas

  • Boa noite.

    A pasta "C\CLIENT\data" existe?

    Já tentaste executar teu programa como Administrador?

    Caso ambas respostas sejam sim, coloque o código do teu método getArquivosPath (aliás, por padronização os nomes dos métodos em C# são em PascalCase - GetArquivosPath) para ajudarmos melhor.


    Att., Rafael Simor

    sexta-feira, 1 de janeiro de 2016 00:03
  • consegui arrumar fazendo assim

    public void verificarArquivos()
            {
                ArrayList arqFolder = getArquivosPath(@"C:\\CLIENT\");
                ArrayList arqFolder2 = getArquivosPath(@"C:\\Users\\J\\Desktop\\OT\\CLIENT TFS\");
                String[] myArr = (String[])arqFolder.ToArray(typeof(string));
                String[] myArr2 = (String[])arqFolder2.ToArray(typeof(string));
                Int32 n = myArr.Length;
                string output = string.Empty;
                string output2 = string.Empty;
    
    
                for (Int32 i = 0; i <= n; i++)
                {
                   string Arquivo1 = myArr[i];
                   string Arquivo2 = myArr2[i];
                    if (File.Exists(Arquivo1) && File.Exists(Arquivo2))
                    {
                        byte[] myArray1 = File.ReadAllBytes(Arquivo1);
                        byte[] myArray2 = File.ReadAllBytes(Arquivo2);
    
                        if (BitConverter.ToString(myArray1) == BitConverter.ToString(myArray2))
                        {
                            output += myArr[i] + "\n";
                        }
                        else
                        {
                            output += myArr2[i] + "\n";
                        }
                    }
                }
    
                MessageBox.Show(output);
            }

    porem agora da o seguinte erro

    Additional information: O índice estava fora dos limites da matriz.

    nesse local: string Arquivo1 = myArr[i];

    sexta-feira, 1 de janeiro de 2016 03:10
  • Aparentemente teu array está nulo.

    Troque teu for por:

    for (Int32 i = 0; i < n; i++)

    Assim caso o tamanho do array seja 0, ele não irá executar o bloco de código.

    Caso não resolva, novamente peço: coloque o código do método getArquivosPath(), por gentileza.


    Att., Rafael Simor

    • Sugerido como Resposta SimorC sábado, 2 de janeiro de 2016 02:48
    • Marcado como Resposta Marcos SJ segunda-feira, 4 de janeiro de 2016 12:39
    sábado, 2 de janeiro de 2016 01:58
  • Fiz conforme vc disse sobre o for, dei uma ajusta e funcionou perfeitamente, muito obrigado pela ajuda rafael ^^

            public void verificarArquivos()
            {
                List<string> arqFolder = getArquivosPath(@"C:\\CLIENT\");
                List<string> arqFolder2 = getArquivosPath(@"C:\\Users\\J\\Desktop\\OT\\CLIENT TFS\");
                string output = string.Empty;
                string output2 = string.Empty;
                int n = (arqFolder.Count + 1);
                arqFolder.Add("final");
                arqFolder2.Add("final");
    
                for (int i = 0; i < n; i++)
                {
    
                    if (File.Exists(arqFolder[i]) && File.Exists(arqFolder2[i]))
                    {
                        byte[] myArray1 = File.ReadAllBytes(arqFolder[i]);
                        byte[] myArray2 = File.ReadAllBytes(arqFolder2[i]);
    
                        if (BitConverter.ToString(myArray1) == BitConverter.ToString(myArray2))
                        {
                            output += arqFolder[i] + "\n";
                        }
                        else
                        {
                            output += arqFolder2[i] + "\n";
                        }
                    }
                
                } 
                var message = string.Join(Environment.NewLine, arqFolder2);
    
    
                MessageBox.Show(output);
            }


    • Editado Aberos sábado, 2 de janeiro de 2016 02:36
    sábado, 2 de janeiro de 2016 02:35