Ir ao conteúdo

Posts recomendados

Postado

Estou estudando sobre arquivos em C++. O problema é que, leio um arquivo qualquer para uma variável, e após salvar esta variável em um arquivo alguns dados são corrompidos, sendo distorção em imagens e problemas em quebra de linha em arquivos de texto, além de um estranho aumento no tamanho do arquivo...

 

IDE: Code::Blocks

SO: Windows 10 x64

c++11 ISO

 

Segue o código:

 

#include <fstream>
#include <iostream>

using namespace std;

int main ()
{

        ifstream file("ico.jpg");

        file.seekg(0,file.end);
        int siz=file.tellg();

        char value[siz];

        file.seekg(0,file.beg);
        file.read(value,siz);


        ofstream out("out.jpg");
        out.write(value,siz);


    return 0;
}

Desde já, grato.

  • Curtir 1
Postado
17 horas atrás, vangodp disse:

Certamente um jpg é um arquivo binário. você esta abrindo ele como arquivo de texto plano. Si ao tentar abrir ele com um editor de texto normal você ver um montão de letras estranhas, certamente o arquivo é binario, o que quer dizer que ele é uma representação da memoria ram, ou seja, o que contêm nesse arquivo são chars, ints, floats ou qualquer outro tipo de dado. Até mesmo pode ser uma struct completa enviado ao arquivo. Para poder abrir corretamente esse tipo de arquivo você deveria conhecer a estrutura exata do arquivo. porém se fizer a copia byte a byte pode que funcione abrindo ele como binário e guardando de forma igual, porém isso é uma suposição, eu nem provei nem tenho tempo de faze-lo.

O problema é que o arquivo é lido de forma correta, usando um cout consigo ler todos os Bytes Hexadecimais..., mas já para escrever, alguns dados são estranhamente alterados, e o mesmo acontece com arquivos de texto(estranhamente, com arquivos de texto, só acontece quando há uma quebra de linha, e isto na mesma proporção). Resumindo, o problema, de alguma forma está entre o char usado e o write, porque ao printar os dados dessa array, todos etão corretos, o contrario de quando o arquivo é escrito, que de alguma forma, até o tamanho está diferente da variavel siz usada.

Postado
23 horas atrás, MassakiMsk disse:

Abre em modo binário.

 

Assim dá certo.

@MassakiMsk  Estou me sentindo burro por não ter tentado isto... kkk', mas vale um desconto por causa do horário que estava mexendo com isso....

 

Enfim, a solução deu certo tanto para arquivos binários quanto para arquivos de texto. Obrigado.

Postado
14 horas atrás, vangodp disse:

O que eu disse, arquivo binário. Se não prestou atenção... :atirador:

@vangodp Na verdade não tinha entendido direito já que tinha tentando usar em um arquivo de texto e também tinha dado o problema... Aí que entra a parte do texto plano... kkk'

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!