Eu² 0 Denunciar post Postado Outubro 6, 2008 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 #FileNume 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) <> "" ThenEu 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
quintelab 91 Denunciar post Postado Outubro 7, 2008 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
Eu² 0 Denunciar post Postado Outubro 9, 2008 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
quintelab 91 Denunciar post Postado Outubro 9, 2008 Que bom que no fim conseguiu resolver e postou a solução para todos. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites