Ir para conteúdo

Arquivado

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

Eu²

[Resolvido] Manipulação de arquivos(?) em c#

Recommended Posts

Olá!

Programo em Vb e Delphi há mais ou menos um ano e meio, e estou começando a aprender agora sobre a plataforma .net.

Decidi começar por C#, pois parece ser mais fácil que C++, e melhor que vb.net.

Eu quero editar um determinado byte de um arquivo, seja ele texto ou não, mas não si como fazer isso e c#.

Tenho as sintaxes em vb e delphi:

Abrir Arquivo e pegar byte de um determinado endereço(por exemplo, 0xA0):

 

VB:

FileNum = FreeFile
	 Open c.dialog.FileName For Binary As #FileNum
	 Get #FileNum, &HA0, Data
	 Close #FileNum

Delphi:

Arquivo := TFileStream.Create(o_dialog.FileName, fmOpenRead or fmShareDenyNone);
	 Arquivo.Position := ($A0);
	 Arquivo.ReadBuffer(ValorOriginal, SizeOf(ValorOriginal));
	 Arquivo.Free;

Vamos supor que eu quero pegar o byte que está no endereço 0xA0 do arquivo aberto com o CommonDialog/OpenDialog.

Usei o programa vbt converter, e converti a "função" do vb para c#, e foi gerado isso:

 

C#:

FileNum = FileSystem.FreeFile()
	 FileSystem.FileOpen(FileNum, op_1.FileName, OpenMode.Binary, (OpenAccess)(-1), (OpenShare)(-1), -1);
	 FileSystem.FileGet(FileNum, Data, 0xA0);
	 lbl_titulo.Text = lbl_titulo.Text+TextData;
Mas quando vou executar, dá alguns erros, entre eles:

Error 1 The name 'FileSystem' does not exist in the current context

Error 2 The name 'OpenMode' does not exist in the current context

Error 3 The type or namespace name 'OpenAccess' could not be found (are you missing a using directive or an assembly reference?)

Error 4 The type or namespace name 'OpenShare' could not be found (are you missing a using directive or an assembly reference?)

A pergunta é a seguinte:

Preciso declarar alguma coisa para esses comandos funcionarem, ou existe uma forma mais fácil de fazer o que eu quero?

 

 

EDIT:

Esqueci de perguntar, para salvar um novo valor ao arquivo, em vb eu uso

FileNum = FreeFile
	 Open c.dialog.FileName For Binary As #FileNum
  Put #FileNum, &HA0, Data
  Close #FileNum
e no delphi

Arquivo := TFileStream.Create(o_dialog.FileName, fmOpenRead or fmShareDenyNone);
	 Arquivo.Position := ($A0);
  Arquivo.WriteBuffer(novovalor, SizeOf(novovalor));
  Arquivo.Free;

Como ficaria isso em C#?

 

 

E por ultimo(para não ficar criando muitos tópicos)

Para verificar se o arquivo aberto com o CommonDialog é vazio(nulo), em vb eu usava

If Trim(CommonDialog.FileName) <> "" Then
Eu converti para c# e ficou assim:

if (Strings.Trim(op_1.FileName) != "")
mas da o seguinte erro:

Error	1	'System.Linq.Strings' is inaccessible due to its protection level

Tem outro jeito de fazer isso?

 

Desculpem-me por perguntar tanta coisa, logo no meu primeiro tópico, e agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu², Seja Bem Vindo ao Fórum iMasters, de uma olhada em nossas regras: Regras do Fórum iMasters

 

Para trabalhar com arquivos é necessário importar a namespace System.IO.

Você coloca junto com as outras namespaces.

using System.IO;

De uma olhada nesse artigo, espero que seja útil: http://www.linhadecodigo.com.br/Artigo.aspx?id=218

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew quintelab, mas eu não entendi nada do link que você me passou O.o

Mas eu fui no site oficial do visual studio, e vi a documentação do metodo FileStream. Depois de ler a emsma coisa umas 30 vezes, consegui resolver o problema xD

Ficou assim:

Abrir e pegar um/vários bytes:

op_1.ShowDialog();
 arquivo = op_1.FileName;
 using (FileStream fs = File.Open(arquivo, FileMode.Open)) 
 {
   byte[] buf = new byte[12];
   fs.Position = 0xa0;
   fs.Read(buf, 0, 12);
   for (int i=0;i<=11;i++)
   {
	   int valor = buf[i]; 
	   lbl_ROM.Text += valor.ToString("X2");
	}//for (int i=0;i<=11;i++)
 }//using (FileStream fs = File.Open(arquivo, FileMode.Open))

 

E para salvar:

string arquivo;
 arquivo = op_1.FileName;
 using (FileStream fs = File.OpenWrite(arquivo))
 {
	byte[] buf = new byte[1024];
	fs.Position = 0xa0;
	fs.WriteByte(0x51);
 }//using (FileStream fs = File.OpenWrite(arquivo))

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.