Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kloster

[Resolvido] Manipular arquivos, SHFileOperation()

Recommended Posts

Olá

 

Estou com dúvida na função SHFileOperation, que pede um ponteiro para a typedef struct _SHFILEOPSTRUCT . Por favor o que está errado. Estou olhando o site MSDN mas ainda não encontrei o erro. Um dúvida também é como criar o ponteiro para a struct e colocá-lo como argumento da função SHFileOperation. Obrigado. Edit:Antes só apontava o erro abaixo e agora há 31 erros por causa da shellapi.h. Por favor se alguem tiver algum exemplo de como usa a função corretamente. Obrigado.

 

Erro do compilador DevC++: parse error before `.', linha 16.

 

#include<stdio.h>
#include<shellapi.h>

char path_from[256+4];
HWND hwnd;

int main()
{
 typedef struct _SHFILEOPSTRUCT copiar;

 GetModuleFileNameA(NULL, path_from,sizeof(path_from));

 copiar.hwnd = hwnd;  // <---- linha 16
 copiar.wFunc = FO_COPY;
 copiar.pFrom = path_from;
 copiar.pTo = "C:\\";
 copiar.fFlags = FOF_NONCONFIRMATION;
 SHFileOperation();
 return 0; 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

e c aki:

copiar.hwnd = hwnd;
você colocar:

copiar.hwnd = NULL;

o erro persiste??

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente fazer como a Isis falow:

copiar.hwnd = &hwnd;

bom acho q é aki q é pra por o '&' neh :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim... Se o treco pede ponteiro = endereco de memória, então se você tem uma variável que não é ponteiro você precisa colocar o & na frente...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Definição de um tipo novo.

Ao invés de escrever struct __NOMEABSURDO pra declarar as coisas, você usa apenas copiar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ali não é uma definição de um tipo novo.

Ali ele está tentando instanciar.

Se ele tirar o typedef ali, ou definir o tipo novo em outro lugar e então usar o novo tipo definido para instanciar a nova variável, vai funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

José Enésio: ali ele está definindo tipo novo,sim. É exatamente o que a linha diz e que um compilador vai entender.

 

Até onde eu sei, instanciação de variável não existe em C. O que existe é declaração e atribuição. Instanciação = criação de objetos de uma classe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Escrevi daquele jeito pois é como está no MSDN. Segui as dicas aqui mas ainda da parse error. Ainda não encontrei pelo google um exemplo em C de como usar a função SHFileOperation. Se alguém souber. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

José Enésio: ali ele está definindo tipo novo,sim. É exatamente o que a linha diz e que um compilador vai entender.

 

Até onde eu sei, instanciação de variável não existe em C. O que existe é declaração e atribuição. Instanciação = criação de objetos de uma classe.

Não é a isso que estou me referindo

 

int main()
{
typedef struct _SHFILEOPSTRUCT copiar;

copiar.hwnd = hwnd;  // <---- linha 16
copiar.wFunc = FO_COPY;

O cara colocou aquilo daquele jeito e utilizou como se fosse uma instância, variável, struct, como preferir chamar, aí que está o erro do código. Novamente digo que se tirar o typedef dali ou definir um novo tipo fora do main (não sei se typedef funciona DENTRO da main, e mesmo assim acho que ficaria mais bonito fora) vai dar certo.

 

 

Mas tu disse que ainda tá dando erro né? Qual erro tá dando agora? O que ele diz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segundo erro:

 

SHFileOperation();

Protótipo:

int WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA);

Logo o que você quer é:

 

SHFileOperation(&copiar);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compilou.

 

Obrigado, as dicas ajudaram ficou assim:

 

#include<stdio.h>
#include<shellapi.h>

char path_from[256+4], path_to;

int main()
{

 SHFILEOPSTRUCT copiar;
 GetModuleFileNameA(NULL, path_from,sizeof(path_from));

 copiar.hwnd = NULL;
 copiar.wFunc = FO_COPY;
 copiar.pFrom = path_from;
 copiar.pTo = path_to;
 copiar.fFlags = FOF_NOCONFIRMATION;
 SHFileOperation(&copiar);
 return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

q bom q conseguiw.

tava vendo na net esse comando, + soh achei exemplos em Delphi!

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.