In einer Form ist eine DataGridView.
Wenn man in diese DGV Dateien per Drag&Drop zieht, soll eine temporäre Kopie erstellt werden und alle Infos(Name, Erstelldatum, etc.) sollen aufgelistet werden.
Dies funktioniert mit allen möglichen Dateien.
Nun soll es auch möglich sein, Anhänge aus OutlookEmails dort "einzufügen"...
Dazu werden beide Dateien in Bytes gelesen und dann werden die Bytes in die temporäre Datei geschrieben.
Wenn man diesen Vorgang mit 1 Datei durchläuft, klappt alles prima und der Inhalt kommt richtig in der Datei an.
Sobald es aber 2 oder noch mehr Dateien sind, gibt es ein Problem:
Die Dateinamen, etc. lassen sich prima ermitteln, aber das schreiben der Bytes ist dann fehlerhaft.
Für die 1. Datei funktioniert es noch, danach gibt es zwar die richtigen Dateinamen und temporären Pfade,
aber
ab der 2. Datei ist immer nur der Inhalt der 1. Datei in den Dateien zu finden und nicht ihr eigener ...
Hier mal die Fkt. die ich für diesen Vorgang aufgebaut habe:
Ich vermute, dass das Problem entweder beim ms.read() oder beim fs.write() liegt, kann aber nicht erkennen woran es dort die Probleme gibt.
Sieht jemand den Fehler und kann mir sagen, was ich ändern oder erweitern muss, damit in den anderen Dateien der richtige Inhalt ankommt?
Wenn man in diese DGV Dateien per Drag&Drop zieht, soll eine temporäre Kopie erstellt werden und alle Infos(Name, Erstelldatum, etc.) sollen aufgelistet werden.
Dies funktioniert mit allen möglichen Dateien.
Nun soll es auch möglich sein, Anhänge aus OutlookEmails dort "einzufügen"...
Dazu werden beide Dateien in Bytes gelesen und dann werden die Bytes in die temporäre Datei geschrieben.
Wenn man diesen Vorgang mit 1 Datei durchläuft, klappt alles prima und der Inhalt kommt richtig in der Datei an.
Sobald es aber 2 oder noch mehr Dateien sind, gibt es ein Problem:
Die Dateinamen, etc. lassen sich prima ermitteln, aber das schreiben der Bytes ist dann fehlerhaft.
Für die 1. Datei funktioniert es noch, danach gibt es zwar die richtigen Dateinamen und temporären Pfade,
aber
ab der 2. Datei ist immer nur der Inhalt der 1. Datei in den Dateien zu finden und nicht ihr eigener ...
Hier mal die Fkt. die ich für diesen Vorgang aufgebaut habe:
VB.NET-Quellcode
- Private Function SaveAttachments2Temp(ByVal e As System.Windows.Forms.DragEventArgs, ByRef retAttachmentDateien() As String, ByRef retTempPfad As String, ByVal LogEinschub As Integer) As String
- Try
- Dim theStream As System.IO.Stream = DirectCast(e.Data.GetData("FileGroupDescriptor"), System.IO.Stream)
- Dim fileCountGroupDescriptor As Byte() = New Byte(0) {}
- theStream.Read(fileCountGroupDescriptor, 0, 1)
- ' Wie viele Dateien wurden per Drag&Drop eingefügt
- Dim AnzahlDateien As Integer = CInt(fileCountGroupDescriptor(0))
- If AnzahlDateien = 0 Then
- SaveAttachments2Temp = "OK"
- Exit Function
- ElseIf AnzahlDateien > 1 Then ' Da es aktuell nur mit 1 geht, gibts diese Abfrage
- SaveAttachments2Temp = "ERROR - Nur eine Datei erlaubt"
- Exit Function
- End If
- Dim AttachByte As Integer = 76 + ((AnzahlDateien) * 332)
- Dim fileGroupDescriptor As Byte() = New Byte(AttachByte) {}
- theStream.Read(fileGroupDescriptor, 0, AttachByte)
- If mTempPfad = "" Or My.Computer.FileSystem.DirectoryExists(mTempPfad) = False Then
- retTempPfad = Backslash(System.IO.Path.GetTempPath) & GetTickCount
- Else
- retTempPfad = mTempPfad
- End If
- If My.Computer.FileSystem.DirectoryExists(retTempPfad) = False Then My.Computer.FileSystem.CreateDirectory(retTempPfad)
- For j = 0 To AnzahlDateien - 1
- ' Ermittlung des Datei-Namen
- Dim fileName As New System.Text.StringBuilder("")
- Dim i As Integer = 75 + (j * 332)
- While fileGroupDescriptor(i) <> 0
- fileName.Append(Convert.ToChar(fileGroupDescriptor(i)))
- i += 1
- End While
- theStream.Close()
- ReDim Preserve retAttachmentDateien(j)
- ' Dies enthält den Pfad zur temp. Datei
- retAttachmentDateien(j) = Backslash(retTempPfad) & fileName.ToString() 'change the c:\ to any path you want
- ' DateiInhalt wird ermittelt
- Dim ms As System.IO.MemoryStream = DirectCast(e.Data.GetData("FileContents", True), System.IO.MemoryStream)
- Dim fileBytes As Byte() = New Byte(ms.Length - 1) {}
- With ms
- .Position = 0
- ' Inhalt wird in ByteArray geschrieben
- .Read(fileBytes, 0, CInt(ms.Length))
- End With
- Dim fs As New System.IO.FileStream(retAttachmentDateien(j), System.IO.FileMode.Create)
- ' Inhalt aus ByteArray geschrieben
- fs.Write(fileBytes, 0, CInt(fileBytes.Length))
- fs.Close()
- Next
- SaveAttachments2Temp = "OK"
- Catch ex As Exception
- SaveAttachments2Temp = "ERROR - " & ex.Message
- End Try
- End Function
Ich vermute, dass das Problem entweder beim ms.read() oder beim fs.write() liegt, kann aber nicht erkennen woran es dort die Probleme gibt.
Sieht jemand den Fehler und kann mir sagen, was ich ändern oder erweitern muss, damit in den anderen Dateien der richtige Inhalt ankommt?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ () aus folgendem Grund: Titel angepasst