Announcement

Collapse
No announcement yet.

Int32 in Datum

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Int32 in Datum

    Hallo zusammen,

    ich suche bereits stunden nach einer nachvollziehbaren Logik/Lösung:

    aus den verschiedenen DateiScanprogrammen habe ich mir ein nettes "grundgerüst" geladen und
    möchte aus den gefundenen Daten ala Struct die Suche weiter eingrenzen.

    Dummerweise bin ich zu doof um die erhaltenen Int32 werte zurück in ein korrektes datum zu bekommen.

    Code:
       <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
        Private Structure WIN32_FIND_DATA
            Public sfileAttributes As Int32
            Public creationTime_lowDateTime As Int32
            Public creationTime_highDateTime As Int32
            Public lastAccessTime_lowDateTime As Int32
            Public lastAccessTime_highDateTime As Int32
            Public lastWriteTime_lowDateTime As Int32
            Public lastWriteTime_highDateTime As Int32
            Public nFileSizeHigh As Int32
            Public nFileSizeLow As Int32
            Public dwReserved0 As Int32
            Public dwReserved1 As Int32
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAX_PATH)> _
            Public fileName As String
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=14)> _
            Public alternateFileName As String
        End Structure
    
    
    Dim dat As Date = Date.FromFileTime(w32data.creationTime_highDateTime)
    ' Datetime, Timestamp und was weiss ich alles - bereits ausprobiert.
    ' Der Hund liegt irgendwo begraben.
    ' Muss ich denn bei meinem win7 / 64 bit die Int32 zu Long umschreiben ?
    Vielen Dank für Hilfe.
    Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
    Um heute vorm PC zu sitzen!

  • #2
    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    führt zu

    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
    Christian

    Comment


    • #3
      #include <windows.h>
      #include <time.h>

      void TimetToFileTime( time_t t, LPFILETIME pft )
      {
      LONGLONG ll = Int32x32To64(t, 10000000) + 116444736000000000;
      pft->dwLowDateTime = (DWORD) ll;
      pft->dwHighDateTime = ll >>32;
      }

      so weit hatte ich zwar auch was gefunden, allerdings dachte ich da gibts
      integrierte standards z.b. die Date.FromFileTime etc.

      ich werde mir den code mal ans herz legen.

      danke
      Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
      Um heute vorm PC zu sitzen!

      Comment


      • #4
        Nunja, wenn du NET programmierst http://msdn.microsoft.com/de-de/libr....fileinfo.aspx
        Christian

        Comment


        • #5
          nene des bringt nichts,

          die suchfunktionen laufen aktuell im backround und mit den APIfunctionen superflott.

          ich wollte nur die suche weiter eingrenzen können wenn ich das datum mit einbeziehe.

          allerdings komm ich da eben nicht weiter,
          Code:
           'Declare Function FileTimeToSystemTime Lib "kernel32" _                       ' veraltet
            '  (ByVal lpFileTime As FILETIME, ByVal lpSystemTime As SYSTEMTIME) As Long ' veraltet
          
          
          
              Declare Function FileTimeToSystemTime Lib "kernel32" _
              (ByVal lpFileTime As Int32, ByVal lpSystemTime As System.DateTime) As Long
          wenn ich nun die vorhanene .net fileinfo einbinde, denke ich, die leistung wird drunter leiden !?
          Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
          Um heute vorm PC zu sitzen!

          Comment


          • #6
            Selbstverständlich, alle NET-Programme leiden darunter, dass sie keine Dateisuche vornehmen können......
            Christian

            Comment


            • #7
              nun gut ... da ich einfach nich aufhören kann:
              habe ich folgende API mal eingebunden:

              Code:
               
              #Region "API Deklaration"
                  Private Declare Auto Function FindFirstFile Lib "kernel32.dll" ( _
                    ByVal lpFileName As String, _
                    ByRef lpFindData As WIN32_FIND_DATA) As IntPtr
              
                  Private Declare Auto Function FindNextFile Lib "kernel32.dll" ( _
                    ByVal hFindFile As IntPtr, _
                    ByRef lpFindData As WIN32_FIND_DATA) As IntPtr
              
                  Private Declare Function FindClose Lib "kernel32.dll" ( _
                    ByVal hFindFile As IntPtr) As Boolean
              
              ' die oben waren im code vorhaden 
              ' die hier müsste doch eigentlich passen !?
                  Declare Function FileTimeToSystemTime Lib "kernel32" _
                      (ByVal lpFileTime As FILETIME, ByVal lpSystemTime As SYSTEMTIME) As Long ' veraltet
              
              
                  <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
                  Structure SYSTEMTIME
                      Public wYear As Int16
                      Public wMonth As Int16
                      Public wDayOfWeek As Int16
                      Public wDay As Int16
                      Public wHour As Int16
                      Public wMinute As Int16
                      Public wSecond As Int16
                      Public wMilliseconds As Int16
                  End Structure
                  <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
                  Structure FILETIME
                      Public dwLowDateTime As Int32
                      Public dwHighDateTime As Int32
                  End Structure
              
              ''''''''''''''''''''''''''''''''''''
              ' allerdings gibt dann speicher schreiben/lesen error zurück:
              
                                      Dim tst As New FILETIME ' struktur oben
                                      tst.dwHighDateTime = w32data.creationTime_highDateTime
                                      tst.dwLowDateTime = w32data.creationTime_lowDateTime
                                      Dim newTime As New SYSTEMTIME
              
                                      Dim xxxx As Long = FileTimeToSystemTime(tst, newTime) ' hier ist 
              
                                                                      ' Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben.
              ich bin mir sicher, dass ich "nur" den wald wegen der bäume nicht sehe

              muss doch irgendwie gehen
              Zuletzt editiert von Fremder; 18.11.2012, 12:51.
              Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
              Um heute vorm PC zu sitzen!

              Comment


              • #8
                Sieht so aus, als ob tst keinen Wert hat
                Christian

                Comment


                • #9
                  tst.dwHighDateTime = w32data.creationTime_highDateTime ' = 30258880
                  tst.dwLowDateTime = w32data.creationTime_lowDateTime ' = 1157194641

                  ich meine zwar auch irgendwie anders
                  (also startdatum müsste 1.1.1601 oder so sein) / 365 Tage und so weiter )
                  ans ziel zu kommen, aber da kommen doch schaltjahre und so chaos dazu
                  * dies ist natürlich blödsinn low and highByte
                  * sorry für soviel durcheinander

                  API ist allerdings wirkliches neuland für mich.

                  aber genau deshalb will ich da jetzt weiterkommen

                  *bettelblick aufsetze*
                  ===========
                  nun gut ... 1ter Fehler ist schonmal
                  ByVal
                  muss ByRef sein
                  ==============
                  nun gut "er" schreibt mir jetzt ja die newTime entsprechend der Structur
                  allerdings bin ich mir nicht sicher ob dies richtig ist.

                  wDay = 5111865
                  wYear = 657372

                  kann ja so nicht stimmen oder ?
                  ================
                  super ... nach echten 400 seiten durchforsten aller möglichkeiten ists halt doch nur

                  die korrekte typfestlegung gewesen :-(

                  uShort war das i-tüpfelchen - falls es überhaupt jemanden interessiert :-)
                  Zuletzt editiert von Fremder; 19.11.2012, 10:32.
                  Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
                  Um heute vorm PC zu sitzen!

                  Comment

                  Working...
                  X