[gelöst] (CC) Pfadlänge auf 98 Zeichen beschränkt

13. Dezember 2013 12:21

Dieses Problem wurde schon vor Jahren unter http://www.msdynamics.de/viewtopic.php?f=7&t=3577&p=14257&hilit=pfadl%C3%A4nge#p14257 angesprochen, auf bislang wohl nicht gelöst.
In NAV 2009 scheint das Problem immer noch zu bestehen, gibt es inzwischen eine Lösung, ggf. auch "extern"?
Zuletzt geändert von stephan.bosau am 13. Dezember 2013 16:13, insgesamt 1-mal geändert.

Re: (CC) Pfadlänge auf 98 Zeichen beschränkt

13. Dezember 2013 12:40

kommt darauf an, was du machen möchtest

Die Zeichenbegrenzung besteht weiterhin

Re: (CC) Pfadlänge auf 98 Zeichen beschränkt

13. Dezember 2013 15:17

Es sollten damit komplette Verzeichnisstrukturen ausgelesen werden in einer Datenbank gespeichert werden um mehrfach vorhandene Dateien zu finden und entsprechend reagieren.
Weiterhin sollte damit auch der Daten-Zuwachs kontrolliert werden.

Da die Daten in ihrer Struktur aber seit Jahren (Jahrzehnten?) so bestehen, sind die Verzeichnisbäume halt recht lang geworden. :-(

Re: (CC) Pfadlänge auf 98 Zeichen beschränkt

13. Dezember 2013 15:20

... eine Idee ist es halt die Verzeichnisse ggf. über eine Automation Variable einzulesen und in einem einfach Textfeld zu speichern - da käme man zumindest auf 250 Zeichen.

Re: (CC) Pfadlänge auf 98 Zeichen beschränkt

13. Dezember 2013 15:52

stephan.bosau hat geschrieben: in einer Datenbank gespeichert


also muss es ja nicht zwingend eine nav-datenbank sein, oder doch?
250 Zeichen werden dir dann aber auch nicht weiterhelfen => BigText als Ausweg?? - und dann stellt sich mir die Frage, warum das ganze mit NAV gemacht werden soll?

Re: (CC) Pfadlänge auf 98 Zeichen beschränkt

13. Dezember 2013 16:13

Nein, es muss nicht zwingend ein NAV-DB sein, aber dann würde ich die Anfrage auch in einem anderen Forum posten. ;-)
... und 250 Zeichen sind auch nicht "alle Welt", aber schon mal über 150% mehr als 98 Zeichen.
Das ganze soll deshalb in NAV entwickelt werden, weil wir dafür eine (Entwickler-)Lizenz haben, nicht aber für andere Umgebungen.

Hab' da noch folgende Lösung gefunden http://www.msdynamics.de/viewtopic.php?f=40&t=10440.

Re: [gelöst] (CC) Pfadlänge auf 98 Zeichen beschränkt

13. Dezember 2013 18:08

stephan.bosau hat geschrieben:Das ganze soll deshalb in NAV entwickelt werden, weil wir dafür eine (Entwickler-)Lizenz haben, nicht aber für andere Umgebungen.


Für .NET brauchst Du da keine weitere Lizenz.

Ich hatte so etwas mal mit einer Access-DB gemacht. Der wesentlichen Code sieht in .NET so aus:

Code:
    Function GetFileInfos(QueryPath As String, QuerySubPath As Boolean) As DataSet

        Dim pfad, dateiname, dateiname2, dateityp As String
        Dim creationdate, accessdate, writedate As DateTime
        Dim filesize As Int64

        Dim ds As New DataSet
        Dim dt As New DataTable("Dateiliste")
        dt.Columns.Add("Pfad")
        dt.Columns.Add("Dateiname")
        dt.Columns.Add("Dateiname2")
        dt.Columns.Add("Dateityp")
        dt.Columns.Add("FileCreationDate")
        dt.Columns.Add("FileAccessDate")
        dt.Columns.Add("FileWriteDate")
        dt.Columns.Add("FileSize")
        Dim row As DataRow

        Try

            For Each datei As String In System.IO.Directory.GetFiles(QueryPath)
                row = dt.NewRow
                pfad = System.IO.Path.GetDirectoryName(datei)
                row("Pfad") = pfad
                dateiname = System.IO.Path.GetFileName(datei)
                row("Dateiname") = dateiname
                dateiname2 = System.IO.Path.GetFileNameWithoutExtension(datei)
                row("Dateiname2") = dateiname2
                dateityp = System.IO.Path.GetExtension(datei)
                row("Dateityp") = dateityp
                creationdate = System.IO.File.GetCreationTime(datei)
                row("FileCreationDate") = creationdate
                accessdate = System.IO.File.GetLastAccessTime(datei)
                row("FileAccessDate") = accessdate
                writedate = System.IO.File.GetLastWriteTime(datei)
                row("FileWriteDate") = writedate
                filesize = My.Computer.FileSystem.GetFileInfo(pfad & "\" & dateiname).Length
                row("FileSize") = filesize
                dt.Rows.Add(row)
                WriteDirectToDB(pfad, dateiname, dateiname2, dateityp, creationdate, accessdate, writedate, filesize)
                'WriteDirectToDB(System.IO.Path.GetDirectoryName(datei), System.IO.Path.GetFileName(datei), System.IO.Path.GetFileNameWithoutExtension(datei), System.IO.Path.GetExtension(datei), System.IO.File.GetCreationTime(datei), System.IO.File.GetLastAccessTime(datei), System.IO.File.GetLastWriteTime(datei))
            Next

            ds.Tables.Add(dt)

            If QuerySubPath = True Then
                For Each subfolder As String In System.IO.Directory.GetDirectories(QueryPath)
                    Try
                        GetFileInfos(subfolder, QuerySubPath)
                    Catch ex As Exception

                    End Try
                Next
            End If
            Return ds

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Function


mit

Code:
  Function WriteDirectToDB(pfad As String, dateiname As String, dateiname2 As String, dateityp As String, creationdate As DateTime, accessdate As DateTime, writedate As DateTime, filesize As Int64)

        ' SelectCommand erstellen welches die "Select-Abfrage" gegen die
        ' Datenbank beinhaltet
        Dim myOleDbSelectCommand As New OleDb.OleDbCommand
        myOleDbSelectCommand.Connection = myOleDbConnection
        myOleDbSelectCommand.CommandText = "insert into dateiliste (Pfad, Dateiname, Dateiname2, Dateityp, FileCreationDate, FileAccessDate,FileWriteDate, FileSize) values ('" & pfad & "', '" & dateiname & "', '" & dateiname2 & "', '" & dateityp & "', '" & creationdate & "', '" & accessdate & "', '" & writedate & "', '" & filesize & "')"
        myOleDbSelectCommand.ExecuteNonQuery()


    End Function


habe ich das in die DB geschoben. Bei NAV könnte an dieser Stelle auch ein Webservice implementiert sein um die Daten in der NAV DB zu speichern.

Volker