WinFuture-Forum.de: C# Dateiformat Aus Binärdatei Auslesen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 3 Seiten +
  • 1
  • 2
  • 3

C# Dateiformat Aus Binärdatei Auslesen

#16 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.686
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 01. April 2005 - 09:33

Ne, spontan fällt mir keine ein.
Konkret zu pdf...Es gibt ein paar PDF-Creator, die in c# geschrieben worden sind ( Hier und Hier)
Vielleicht kriegst du da was raus.
Aber höchstwahrscheinlich müsstest du bei denen wirklich den Header auslesen...

Dieser Beitrag wurde von Witi bearbeitet: 01. April 2005 - 09:34

0

Anzeige



#17 Mitglied ist offline   Tomato 

  • Gruppe: Mitglieder
  • Beiträge: 6
  • Beigetreten: 14. März 05
  • Reputation: 0

geschrieben 20. April 2005 - 12:50

Hallo! Ich habe ein Problem, welches Du offensichtlich schon gelöst hast.
[quote name='tooligan' date='30.03.2005, 10:16']
//Anschließend wird 'bytes' als Blob in der Datenbank gespeichert.


Ich will eigentlich nur einen byte[] im Blob speichern und später wieder auslesen.
wenn ich jedoch
INSERT INTO `objekte` ('blobbie') VALUES ("+blob+");

mache (blob ist vom Typ byte[]) wird nur der String "System.Byte[]" gespeichert.

wie geh ich da nu dran?
Danke im voraus.

Dieser Beitrag wurde von Tomato bearbeitet: 20. April 2005 - 12:51

0

#18 Mitglied ist offline   constructor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 112
  • Beigetreten: 18. April 05
  • Reputation: 0

geschrieben 20. April 2005 - 12:55

Hi!

Welche Datenbank verwendest du?
0

#19 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.686
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 20. April 2005 - 12:56

beim speichern in die Datenbank, nimmst du nicht das Objekt, sondern den String der das Objekt darstellt.
Es wird somit myByteArray.ToString() aufgerufen.
Versuch es einfach mal mit Serialisieren
0

#20 Mitglied ist offline   constructor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 112
  • Beigetreten: 18. April 05
  • Reputation: 0

geschrieben 20. April 2005 - 13:06

@witi

imho liegt ein Byte[] Array bereits in seiner serialisierten Endform vor!?
0

#21 Mitglied ist offline   Tomato 

  • Gruppe: Mitglieder
  • Beiträge: 6
  • Beigetreten: 14. März 05
  • Reputation: 0

geschrieben 20. April 2005 - 13:11

Die Datenbank ist MySQL.

die Werte im BLOB habe ich wie folgt gefüllt:
byte[] blob=new byte[1024];
...

blob[i]=intwert;


Ich kenn mich ehrlich gesagt mit serialisieren gar nicht aus. Was muss ich denn nun da tun?
0

#22 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.686
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 20. April 2005 - 13:12

Nochmal...damit du ein Objekt (unter C# sind alles Objekte auch Datentypen) nach dem speichern (in ne Datei, Stream, Datenbank), wieder laden kannst, musst du es vorher serialisieren.
Du kriegst es zwar nachher raus, aber es ist kein Objekt mehr!
0

#23 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.686
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 20. April 2005 - 13:14

Guck dir dieses Beispiel an, was ich vorher mal gepostet habe:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public class Bild
{
	public static void Main()
	{
  Image image = Image.FromFile("test.jpg");
  MemoryStream stream = new MemoryStream();

  BinaryFormatter formatter = new BinaryFormatter();
  formatter.Serialize(stream, image);

  stream.Seek(0,0);

  image = (Image)formatter.Deserialize(stream);

  if (image.RawFormat.Equals(ImageFormat.Jpeg))
 	 Console.WriteLine("Es handelt sich um eine Jpg-Datei!");
	}

}

<{POST_SNAPBACK}>
[/quote]
0

#24 Mitglied ist offline   constructor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 112
  • Beigetreten: 18. April 05
  • Reputation: 0

geschrieben 20. April 2005 - 13:16

Gehst du mit .NET und dem ADO System.Data.OleDb Dataprovider auf die Datenbank?
0

#25 Mitglied ist offline   Tomato 

  • Gruppe: Mitglieder
  • Beiträge: 6
  • Beigetreten: 14. März 05
  • Reputation: 0

geschrieben 20. April 2005 - 13:26

Wenn ichs nach obigen beispiel serialisiere., bleibts weiterhin ein String, aber: System.IO.MemoryStream

Der Zugriff erfolgt über odbc (Microsoft.Data.Odbc;)

Ich befürchte, ich konvertiere das ganze in einen String und speichers als Varchar.

Danke auf jeden Fall
0

#26 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.686
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 20. April 2005 - 13:37

Zitat (Tomato: 20.04.2005, 14:26)

Ich befürchte, ich konvertiere das ganze in einen String und speichers als Varchar.
Danke auf jeden Fall
<{POST_SNAPBACK}>

Dann hast du du immer noch das Problem, wie du das Array rausbekommst?
Du könntest, als sehr sinnvolle alternative <_< , die Werte im Array aneinanderhängen und das dann in die Datenbank schreiben...
0

#27 Mitglied ist offline   constructor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 112
  • Beigetreten: 18. April 05
  • Reputation: 0

geschrieben 20. April 2005 - 13:39

Okay, dann solltest du über eine parameterisierte INSERT-Abfrage machen - ist sowieso der bessere weg (siehe SQL-Injection)

Hier mal ein VB.NET Beispiel mit einem Bild als Binary Array

    ' SQL-Verbindung erzeugen
    Dim cn As New SqlConnection(strCn)
    ' SQL-Kommando anlegen
    Dim cmd As New SqlCommand("INSERT INTO BLOBTest " & _
                              "(BLOBData) VALUES (@BLOBData)", _
                              cn)
    ' Image in einen MemoryStream schreiben
    Dim ms As MemoryStream = New MemoryStream
    PictureBox1.Image.Save(ms, ImageFormat.Jpeg)
  
    ' BLOB-Bytearray aus dem MemoryStream
    Dim bytBLOBData(CInt(ms.Length) - 1) As Byte
    ms.Position = 0
    ms.Read(bytBLOBData, 0, ms.Length)

    ' Ab hier wird es für dich interessant:
  
    ' Parametrierte INSERT-Abfrage befüllen und ausführen
    Dim prm As New SqlParameter("@BLOBData", _
                                 SqlDbType.VarBinary, _
                                 bytBLOBData.Length, _
                                 ParameterDirection.Input, _
                                 False, _
                                 0, _
                                 0, _
                                 Nothing, _ 
                                 DataRowVersion.Current, _ 
                                 bytBLOBData)
                    
    cmd.Parameters.Add(prm)
    cn.Open()
    cmd.ExecuteNonQuery()
    cn.Close()

Dieser Beitrag wurde von constructor bearbeitet: 20. April 2005 - 13:50

0

#28 Mitglied ist offline   constructor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 112
  • Beigetreten: 18. April 05
  • Reputation: 0

geschrieben 20. April 2005 - 13:55

Zitat (Witi: 20.04.2005, 14:37)

Du könntest, als sehr sinnvolle alternative <_< , die Werte im Array aneinanderhängen und das dann in die Datenbank schreiben...
<{POST_SNAPBACK}>


Mhm, wie soll das funktionieren?
In deinem Beispiel speicherst du das Image in einem MemoryStream - was einem Byte[] Array entspicht (schau dir einfach mal den Buffer von "stream" an)

Wie möchtest du die Werte aneinanderhängen?

Beste Grüße

Dieser Beitrag wurde von constructor bearbeitet: 20. April 2005 - 14:10

0

#29 Mitglied ist offline   Tomato 

  • Gruppe: Mitglieder
  • Beiträge: 6
  • Beigetreten: 14. März 05
  • Reputation: 0

geschrieben 20. April 2005 - 14:08

Ich habs geschafft. Ist zwar nicht schön, aber funzt.

Habs erst in eine temporäre File gespeichert, und die dann per LOAD_FILE im SQL-Statement ins Blob gepackt.
0

#30 Mitglied ist offline   constructor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 112
  • Beigetreten: 18. April 05
  • Reputation: 0

geschrieben 20. April 2005 - 14:14

@Tomato
Puh, möchtest du wirklich diesen Weg gehen?
0

Thema verteilen:


  • 3 Seiten +
  • 1
  • 2
  • 3

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0