Copyfile über 260 Zeichen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Dancger.

    Copyfile über 260 Zeichen

    Huhuuu :)

    Habe folgendes problem ich kopiere einige Dateien und der springt des öffteren in die Exseption mit der Meldung
    das der Dateiname Länger als 260 Zeichen ist...

    My.Computer.FileSystem.CopyFile(copyquelle & filee, copyziel & filee, True)

    ntfs unterstüzt eig. doch mehr als 260 zeichen dachte ich :o ?

    muss man da noch einen parameter setzen oda so?

    danke für eure hilfe :)

    lg Datsspeed
    Auszug aus Naming Files, Paths, and Namespaces
    Note
    File I/O functions in the Windows API convert "/" to "\" as part of converting the name to an NT-style name, except when using the "\\?\" prefix as detailed in the following sections.

    The Windows API has many functions that also have Unicode versions to permit an extended-length path for a maximum total path length of 32,767 characters. This type of path is composed of components separated by backslashes, each up to the value returned in the lpMaximumComponentLength parameter of the GetVolumeInformation function (this value is commonly 255 characters). To specify an extended-length path, use the "\\?\" prefix. For example, "\\?\D:\very long path".

    Note The maximum path of 32,767 characters is approximate, because the "\\?\" prefix may be expanded to a longer string by the system at run time, and this expansion applies to the total length.
    nutze den parameter nun und nun sagt er ich nutze ein illegals zeichen ...

    My.Computer.FileSystem.CopyFile(copyquelle & filee, "\\?\" & copyziel & filee, True)

    da kommt die fehler meldung : Illegales Zeichen im Pfad.

    hab ich die antwort jetzt falsch aufgenommen ?
    lg
    Ich bin mir nicht ganz sicher, aber ich glaube, die Copy-Methoden von .NET kommen damit nicht zurecht. Du musst eine API-Funktion verwenden. Wenn ich richtig in Erinnerung habe, heisst die Funktion CopyFileEx. Also Nach CopyFileEx + API suchen

    EDIT: Link zu CopyFileEx

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

    datsspeed schrieb:

    nutze den parameter nun und nun sagt er ich nutze ein illegals zeichen ...
    My.Computer.FileSystem.CopyFile(copyquelle & filee, "\\?\" & copyziel & filee, True)

    Fargezeichen sind illegale Zeichen^^

    Btw: Versuch ma einen Ordner mit "?" zu erstellen..

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...

    datsspeed schrieb:

    Das ist mir bewusst Dancger...

    Toll, für mich hat das jedenfalls nach einer Frage getönt und nicht nach "Das ist mir bewusst"..

    datsspeed schrieb:

    ich glaub du hast nich wirklich mitbekommen um was es hier geht ...

    Ich denke, du willst ein File kopieren jedoch ist dein Pfad länger als 256 Zeichen..

    Wenn du in deinem Pfad mehr Zeichen als 256 (NTFS Maximale Pfadlänge) musst du den letzten Ordner mappen (Netzlaufwerk erstellen) und dann hast du wieder 256 (- Abzug des Netzlaufwerknamens)..

    Für dich:
    - If Abfrage ob der Pfad länger als 256 Zeichen ist
    - Wenn ja, den letzmöglichen Pfad mappen
    - File kopieren
    - Map wieder löschen

    Ich hoffe diese Antwort entspricht deiner Vorstellung.

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Ich mappe immer mit diesem Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. ' Netzlaufwerk verbinden/trenne (ohne Windows-Dialog)
    3. Private Declare Function WNetAddConnection Lib "mpr.dll" _
    4. Alias "WNetAddConnectionA" ( _
    5. ByVal lpszNetPath As String, _
    6. ByVal lpszPassword As String, _
    7. ByVal lpszLocalName As String) As Long
    8. Private Declare Function WNetCancelConnection Lib "mpr.dll" _
    9. Alias "WNetCancelConnectionA" ( _
    10. ByVal lpszName As String, _
    11. ByVal bForce As Long) As Long
    12. ' Fehler-/Rückgabe-Konstanten
    13. Private Const WN_SUCCESS = 0
    14. Private Const WN_NET_ERROR = 2
    15. Private Const WN_BAD_PASSWORD = 6
    16. ' Netzlaufwerk verbinden
    17. Public Function Drive_Connect(ByVal LocalDrive As String, _
    18. ByVal NetworkPath As String, _
    19. Optional ByVal ShowError As Boolean = False) As Boolean
    20. Dim lResult As Long
    21. lResult = WNetAddConnection(NetworkPath, _
    22. vbNullString, LocalDrive)
    23. If ShowError And lResult <> WN_SUCCESS Then
    24. If lResult = WN_NET_ERROR Then
    25. MsgBox("Netzwerkfehler!")
    26. ElseIf lResult = WN_BAD_PASSWORD Then
    27. MsgBox("Ungültiges Passwort!")
    28. Else
    29. MsgBox("Unbekannter Fehler")
    30. End If
    31. End If
    32. Drive_Connect = (lResult = WN_SUCCESS)
    33. End Function
    34. ' Netzlaufwerk trennen
    35. Private Function Drive_Disconnect( _
    36. ByVal LocalDrive As String, _
    37. Optional ByVal ShowError As Boolean = False) As Boolean
    38. Dim lResult As Long
    39. lResult = WNetCancelConnection(LocalDrive, True)
    40. If ShowError And lResult <> WN_SUCCESS Then
    41. If lResult = WN_NET_ERROR Then
    42. MsgBox("Netzwerkfehler!")
    43. ElseIf lResult = WN_BAD_PASSWORD Then
    44. MsgBox("Ungültiges Passwort!")
    45. Else
    46. MsgBox("Unbekannter Fehler")
    47. End If
    48. End If
    49. Drive_Disconnect = (lResult = WN_SUCCESS)
    50. End Function
    51. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    52. ' Netzlaufwerk verbinden
    53. ' K: (lokal) mit \\SERVER\C
    54. ' (evtl. Fehler anzeigen)
    55. Drive_Connect("L:", "\\localhost\D$\UserData\******\My Documents\Visual Studio 2008\Projects\WindowsApplication1\WindowsApplication1\obj", True)
    56. End Sub
    57. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    58. ' Netzlaufwerk trennen (K:)
    59. ' (evtl. Fehler unterdrücken)
    60. Drive_Disconnect("L:", False)
    61. End Sub
    62. End Class

    Bei mir funktioniert's.

    Danach kannst du einfach deinen weiteren Pfad mit "L:\DeineWeiterenOrdner" zusammensetzen..^^

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...