Cópia de arquivo



  • Olá pessoal, tudo bem?

    Escrevi uma função para fazer uma cópia de um arquivo para uma pasta qualquer, compilei o código no Qt 5 e fiz testes com a função para ver se tudo estava funcionando corretamente.

    Tudo funcionou corretamente, porém, para minha surpresa, percebi que quando eu executo o software pelo Qt Creator a cópia é feita com sucesso, já quando executo o software de forma independente o arquivo não é copiado para a pasta destino.

    Tentei executa-lo como administrador, mas também sem sucesso. Verifiquei as permissões da pasta destino e também estava tudo ok.

    Não faço ideia do que possa estar acontecendo, coloquei o código logo abaixo para ver se alguém pode me ajudar.

    @bool enviaXMLparaCaminho(QFile& arquivo, QDir pasta_destino, bool remover) {
    //Se o diretório destino existe, fazer...
    if (pasta_destino.exists()) {
    //Le o caminho completo e pega somente o nome do arquivo
    QString nome_arquivo = arquivo.fileName().split("/").last();

        //Criar um endereço completo para o arquivo destino
        QFile arquivo_destino;
        arquivo_destino.setFileName(pasta_destino.path() + "/" + nome_arquivo);
    
        int cont=1;
        forever {
            if (arquivo_destino.exists()) {
                arquivo_destino.setFileName(pasta_destino.path() + "/" + QString::number(cont) + "_" + nome_arquivo);
            } else {
                break;
            }
            ++cont;
        }
    
        //Tenta copiar arquivo para o destino.
        if (arquivo.copy(arquivo.fileName(), arquivo_destino.fileName())) {
            if (remover)
                if (!arquivo.remove()) {
                    cout << "Voce nao tem permissao para excluir o arquivo: " << arquivo.fileName().toUtf8().data() << endl;
                }
        } else {
            cout << "O arquivo " << arquivo.fileName().toUtf8().data() << " nao pode ser copiado, talvez voce nao tenha permissao na pasta destino." << endl;
            return false;
        }
    } else {
        cout << "Caminho destino nao existe!" << endl;
        return false;
    }
    
    return true;
    

    }@



  • Que erro aparece?

    Pode ser:

    Quando você roda manualmente, o EXE não acha as DLL's do Qt automaticamente.

    Quando você roda pelo QtCreator, ele coloca as DLL's do Qt (que o seu executável depende) no PATH. Assim ele roda corretamente.



  • Olá TIoRoy, obrigado pela interação nesta Thread.

    Quanto as DLLs acredito que não seja, porque eu já fiz a configuração na PATH, o caminho configurado na variável é C:\Qt\Qt5.1.0\5.1.0\mingw48_32\bin;

    A mensagem de erro retornada é da própria função, na linha 28 do código que postei:

    @O arquivo arquivo.xml nao pode ser copiado, talvez voce nao tenha permissao na pasta destino.@



  • executa o aplicativo como administrador pra ver se resolve... se nao, verifique se o arquivo esta sinalizado como somente leitura...



  • Como eu havia citado, tentei executar como administrador, mas também não funciona.

    O arquivo também não está como somente leitura, qualquer arquivo que eu tento copiar retorna esta mensagem.



  • Rodando no Linux (Fedora 18 x64) e Qt 5.1, o código funciona perfeito, dentro e fora do QtCreator. Chamei assim:

    @
    #include <QDir>
    #include <QFile>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    {
    QDir d("/tmp2");
    QFile file("/tmp/teste.txt");
    enviaXMLparaCaminho(file, d, false);
    }
    @

    Vou tentar num Windows



  • Acabei de testar num Windows.... e funcionou também:

    @
    int main(int argc, char *argv[])
    {
    QDir d("/temp2");
    QFile file("/temp/teste.txt");
    enviaXMLparaCaminho(file, d, false);
    }
    @

    !http://s12.postimg.org/6fwh85iil/screenshot_45.png(Console)!

    Como você está chamando a função?



  • Olá TIoRoy, obrigado pelas respostas.

    Gravarei um vídeo até amanhã para detalhar mais a questão.

    Talvez possa nos ajudar.

    []'s


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.