---
title: "Läsa binary fil"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/179657-läsa-binary-fil"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "saw"
published: "2009-08-04T18:01:36.000Z"
updated: "2009-08-14T15:30:55.000Z"
replies: 9
views: 709
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/179657-läsa-binary-fil"
---

# Läsa binary fil

## #1 — saw, 2009-08-04T18:01Z

Jag återkommer till ett gammalt problem. Jag spelar lite musik och i mitt 
keyboard så kan man via floppydisk ladda in nya styler(USER01.STY t ex)
I denna fil så finns bl a titel osv inkl stylerna. Nu skulle jag vilja kunna läsa in
dessa viler, se titlarna, spara i databas för att senare kunna göra egna styler.

Jag har letat runt och hittat lite men jag får inte fram någonting av värde.
Någon som har något tips som kan ge mig en skjuts framåt?

 :stud

Permalänk: https://www.webforum.nu/p/179657

## #2 — saw, 2009-08-05T13:10Z

Genom att tita i en hexa-editor så kan jag se hur strukturen ser ut:
Jag bifoga en bild på det. 
Jag kan tyvärr inte ladda upp en kopia av sty-filen, men om någon är 
intresserad så kan jag maila.

Så här långt har jag kommit:

```
Stream myStream;
string flPath = @"A:\DIRECTFD.SET\Style\USER02.STY";
FileInfo fi = new FileInfo(flPath);
myStream = fi.OpenRead();
Byte[] myBytes = new Byte[myStream.Length];
int i = myStream.Read(myBytes, 0, myBytes.Length);
string sText = System.Text.Encoding.UTF8.GetString(myBytes);
textBox1.Text = sText;
myStream.Close();
```

Jag kan öppna väldigt många filer nu, men inte det viktigaste, min sty-fil.
Tips vore väldigt tacksamt.

\[REDIGERAT\]
Denna kodsnutt fungerade på VB

```
Dim strRow As String 
Dim strText As String 
Dim sFil As String 

If Label1.Caption > "" Then 
   sFil = Label1.Caption 
   
     Open sFil For Binary As #1 
     
        strRow = string(LOF(1)," ")
      

        Get #1, , strRow  

     Close #1 

     strText = Replace(strRow, vbNullChar, "")
     Text1.Text = strText

Else 
   Label1.Caption = "Du måste välja en fil först" 
End If
```

.. men att översätta den...

Bilagor:

- [Hexa.gif](https://www.webforum.nu/a/20603.gif)

Permalänk: https://www.webforum.nu/p/2197868

## #3 — Phorpher, 2009-08-05T14:05Z

Förutsatt att det är en Yamahakeyboard du har så kanske PDF-filen här: <http://www.wierzba.homepage.t-online.de/stylefiles.htm>  kan hjälpa?

Permalänk: https://www.webforum.nu/p/2197872

## #4 — saw, 2009-08-05T16:02Z

Nej jag har en Korg Pa1X

\[Redigerat\]
Nu börjar det röra på sig...

```
using (TextReader input = new StreamReader(new FileStream(flPath, FileMode.Open), System.Text.Encoding.Unicode))
            {
                String str = input.ReadToEnd();
                textBox1.Text = str;
            }
```

Då fick jag fram..
&#5121;&#2048;&#37965;&#6144;
Hur kan jag gå vidare med det?

Permalänk: https://www.webforum.nu/p/2197875

## #5 — Phorpher, 2009-08-05T18:31Z

Du får försöka hitta en liknande guide som den jag länkade till (fast för Korg-keyboards istället.) Alternativt så mailar du till Korg och frågar om de har en specifikation på \*.sty-formatet.

När du har en specifikation på hur filen är formaterad så får du skriva en parser som som kan läsa in rätt antal tecken till rätt datastruktur från filen.

Permalänk: https://www.webforum.nu/p/2197885

## #6 — saw, 2009-08-06T11:10Z

Jo jag skall göra detta, men det hjälper ju inte om jag inte kan se innehållet som i en hexeditor...

Permalänk: https://www.webforum.nu/p/2197954

## #7 — Phorpher, 2009-08-06T11:27Z

Alltså. I en specifikation kommer det att stå någonting i stil med att filen startar med en header på 42 bytes där de åtta första är en kontrollsumma, nästa 12 bytes är namnet på style-filen, nästa sex är..., osv... Sen kanske innehållet kommer där ett visst antal bytes betyder vilket typ av instrument som avses, sen några bytes för reverb, några för ditt och några för datt.

Har du den informationen så vet du att om du läser in de första åtta från filen så kommer det att vara en kontrollsumma. Den kan du lagra undan och sen göra en motsvarande koll när hela filen är inläst att kontrollsumman stämmer. Nästa 12 bytes är ett namn (så rimligtvis en sträng). Läs in 12 bytes, stoppa i din namn-variabel och så har du namnet.

Jag vet inte om du blev så mycket klokare men det är ungefär den process som du måste gå igenom för att läsa in en fil.

Permalänk: https://www.webforum.nu/p/2197957

## #8 — saw, 2009-08-06T20:00Z

Hej och tack för din information.
Jo jag förstår hur du menar och det låter klokt. JAg återkommer.

Permalänk: https://www.webforum.nu/p/2198013

## #9 — saw, 2009-08-14T08:24Z

Mera problem

Jag har kontaktat Korg men de är tydligen inte villiga att släppa  på 
specifikationen ang sty -filerna.

Eftersom jag hadde svårt att läsa filerna, så fick jag iden att börja med en
HexaEditor. Nu kunde jag se vad filerna innehöll. Jag hittade en lösning här:
<http://www.codeproject.com/KB/cs/HexEditor.aspx>. Vad som är det första
problemet är att den är otroligt långsam, flera minuter för att läsa av en fil på
500-600 kb.
Några bra tips?  :stud

Permalänk: https://www.webforum.nu/p/2198665

## #10 — saw, 2009-08-14T15:30Z

Jag har kommit en bit på vägen, och tänkte visa lite kod.

```
private void btnOpenFile_Click(object sender, EventArgs e)
        {
            path = txtFileName.Text + "\\" + listBox1.SelectedItem.ToString();
FileStream strm = new FileStream(path, FileMode.Open, FileAccess.Read);

            if (Data != null)
                Array.Clear(Data, 0, Data.Length);
            Data = new Byte[strm.Length];
            strm.Read(Data, 0, (int)strm.Length);
            strm.Close();
            FillTextBox();
}
private void FillTextBox()
        {
            txtNormal.Text = "";
            StringBuilder strb = new StringBuilder();
            StringBuilder text = new StringBuilder();
            char[] ch = new char[1];
            lblStatus.Text= "Status: Upptagen..." ;
            for (int x = 0; x < Data.Length; x += 16)
            {
                text.Length = 0;
                strb.Length = 0;
                for (int y = 0; y < 16; ++y)
                {
                    if ((x + y) > (Data.Length - 1))
                        break;
                    ch[0] = (char)Data[x + y];
                    strb.AppendFormat("{0,0:X2} ", (int)ch[0]);
                    if (((int)ch[0] < 32) || ((int)ch[0] > 127))
                        ch[0] = '.';
                    text.Append(ch);

                    Application.DoEvents();
                    
                }
                text.Append("\r\n");
                while (strb.Length < 52)
                    strb.Append(" ");
                strb.Append(text.ToString());
                txtNormal.Text += strb.ToString();
            } 
            txtNormal.Select(0, 0);
            lblStatus.Text = "Status: Klar...";
        }
```

Denna koden är väldig snabb, men den tycks inte stanna, det "flackar" hela
tiden i texboxen, som om den inte är färdig. Jag har låtit den rulla på ganska
så länge, men den gör likadant hela tiden. Detta gör att jag inte kan ställa mig
i textboxen för att kopiera t ex, då far muspekan direkt till början av textboxen.
Jag kan inte heller stänga av applikationen, den försvinner men enl debug
så är den igång hela tiden.
Jag stänger med

```
Application.Exit();
```

 
Förslag motages tacksamt.

Permalänk: https://www.webforum.nu/p/2198732

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/179657-läsa-binary-fil
