FileSystem.InputString

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    FileSystem.InputString

    ich habe einen vb6-code...dort wird ein $ gelesen

    Visual Basic-Quellcode

    1. sInput = Input(8192, #nFile)


    dieser $ wird weiterverarbeitet.

    in vb net habe ich nun folgendes

    VB.NET-Quellcode

    1. sInput = FileSystem.InputString(nFile, 8192)


    die weiterverarbeitung schlägt jedoch fehl, da der $ bei vb mit
    CHR(0) weiterverarbeitet wird. bei Net wird er bei der auswertung
    abgeschnitten.

    was könnte man da machen ?

    das gibt er mir als $ raus:

    VB.NET-Quellcode

    1. sInput = "ID3" & ChrW(3) & vbFormFeed & "$TPE1" & vbVerticalTab & "4th CircleTIT2" & vbBack & "OpeningTALB" & vbLf & "LifetimesTRCK" & ChrW(3) & "01TCON" & ChrW(5) & "Darkÿû“" & vbFormFeed & ChrW(15) & "ði" & ChrW(7) & vbCr & " à" & ChrW(1) & ¤4€LAME3.82UUUUUUUUUUU...


    ich brauche das aber so wie bei VB6 als ganz normalen $
    Im obsoleten/nicht mehr zu verwendeten VisualBasic-Namespace gibt es ne Input-Funktion (Microsoft.VisualBasic.Input()). Auch die »guten« Funktionen im IO-Namespace bieten einiges an Import-Funktionen (z.B. IO.File.ReadAllLines()). Um da für alle Beteiligten die richtige zu finden, wäre es gut, wenn Du schreibst, wie Dein Quelltext (Inhalt Deiner auszulesenden Datei, ggf. auch erstmal nur ein relevanter Ausschnitt daraus) aussieht und was bei VB6 rauskam. Aus Deinem Post vermute ich, dass der letzte Codeteil angibt, was NICHT rauskommen soll. Das ist aber als Info zu wenig, um weiterhelfen zu können.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ich habe beide funktionen, die du nanntest ausprobiert.
    in beiden fällen kommt nur das formatierte raus.
    ich brauche das aber als einen $ wie in vb.

    also....inhalt ist ne MP3

    hier der teil aus vb

    Visual Basic-Quellcode

    1. nFile = FreeFile
    2. Open m_sFilePath For Binary As #nFile
    3. Seek #nFile, LOF(nFile) - 127
    4. sInput = Input(128, #nFile)
    5. If Left(sInput, 3) = "TAG" Then
    6. m_ID3V1 = True
    7. End If
    8. Seek #nFile, 1
    9. sInput = Input(8192, #nFile)
    10. m_lFileSize = LOF(nFile)
    11. if Left$(sInput, 3) = "ID3" Then
    12. ID3Position = 1
    13. m_ID3V2 = True
    14. End If
    15. If ID3Position Then
    16. ' Bytes mit Längen-Info des Tags lesen
    17. sID3Len = Mid$(sInput, ID3Position + 6, 4)
    18. ' länge des Tags berechnen
    19. On Local Error Resume Next
    20. ID3V2Len = &H200000 * Asc(Left$(sID3Len, 1)) + _
    21. &H4000 * Asc(Mid$(sID3Len, 2, 1)) + _
    22. &H80 * Asc(Mid$(sID3Len, 3, 1)) + _
    23. Asc(Mid$(sID3Len, 4, 1))
    24. ' Tag überspringen
    25. Seek #nFile, ID3Position + ID3V2Len + 10
    26. 'wird benötigt zur Berechnung der Headerposition
    27. HDPos = ID3Position + ID3V2Len + 10
    28. m_lFileSize = m_lFileSize - (ID3Position + ID3V2Len + 10)
    29. ' neuen Einlesen
    30. sInput = Input(8192, #nFile)
    31. End If
    32. Close #nFile


    hier der vb .net code

    VB.NET-Quellcode

    1. Dim nFile As Integer = FileSystem.FreeFile()
    2. FileSystem.FileOpen(nFile, m_sFilePath, OpenMode.Binary)
    3. FileSystem.Seek(nFile, FileSystem.LOF(nFile) - 127)
    4. Dim sInput As String = FileSystem.InputString(nFile, 128)
    5. If sInput.StartsWith("TAG") Then
    6. m_ID3V1 = True
    7. End If
    8. FileSystem.Seek(nFile, 1)
    9. 'Einlesen der ersten vier Kilobytes um
    10. 'den Header der Datei zu finden
    11. sInput = FileSystem.InputString(nFile, 8192) <<<<<<<<<<< HIER IST DER FEHLER !!!!!!!!!!!!!
    12. 'Wird für die Berechnung der Trackduration benötigt
    13. m_lFileSize = FileSystem.LOF(nFile)
    14. ' Ist ein ID3V2-Tag vorhanden?
    15. If sInput.StartsWith("ID3") Then
    16. ID3Position = 1
    17. m_ID3V2 = True
    18. End If
    19. If ID3Position Then
    20. ' Bytes mit Längen-Info des Tags lesen
    21. sID3Len = Mid$(sInput, ID3Position + 6, 4)
    22. ' länge des Tags berechnen
    23. On Error Resume Next
    24. 'ID3V2Len = &H200000 * Strings.Asc(sID3Len.Substring(0, Math.Min(1, sID3Len.Length))(0)) + &H4000s * Strings.Asc(sID3Len.Substring(1, Math.Min(1, sID3Len.Length - 1))(0)) + &H80s * Strings.Asc(sID3Len.Substring(2, Math.Min(1, sID3Len.Length - 2))(0)) + Strings.Asc(sID3Len.Substring(3, Math.Min(1, sID3Len.Length - 3))(0))
    25. ID3V2Len = &H200000 * Strings.Asc(sID3Len.Substring(0, Math.Min(1, sID3Len.Length))(0)) +
    26. &H4000S * Asc(Mid$(sID3Len, 2, 1)) +
    27. &H80 * Asc(Mid$(sID3Len, 3, 1)) +
    28. Asc(Mid$(sID3Len, 4, 1))
    29. ' Tag überspringen
    30. FileSystem.Seek(nFile, CInt(ID3Position + ID3V2Len + 10))
    31. 'wird benötigt zur Berechnung der Headerposition
    32. HDPos = CInt(ID3Position + ID3V2Len + 10)
    33. m_lFileSize = CInt(m_lFileSize - (ID3Position + ID3V2Len + 10))
    34. ' neuen Einlesen
    35. sInput = FileSystem.InputString(nFile, 8192)
    36. End If
    37. FileSystem.FileClose(nFile)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „woeh“ ()

    woeh schrieb:

    also....inhalt ist ne MP3
    Nimm IO.File.ReadAllBytes(...) oder einen sequenziellen BinaryReader.
    Bei Deiner VB6-Steinkohle wird Dir hier niemand so recht helfen wollen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!