ΠΛΗΡΟΦΟΡΙΕΣ: Εργασία με τη δομή FILETIME

ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.

Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:188768
Περίληψη
Μια φορά το αρχείο αντιπροσωπεύει την συγκεκριμένη ημερομηνία και ώρα κατά την οποία ήταν ένα δεδομένο αρχείοδημιουργήθηκε, τελευταία προσπέλαση ή τελευταία εγγραφή. Μια φορά το αρχείο είναι αποθηκευμένο σε έναΔομή FILETIME. Αυτή η δομή χρησιμοποιείται με διάφορες κλήσεις API του Win32.
Περισσότερες πληροφορίες
Η δομή FILETIME αντιπροσωπεύει τον αριθμό των διαστημάτων 100-δισεκατομμυριοστών του δευτερολέπτουαπό την 1 Ιανουαρίου 1601. Η δομή που αποτελείται από δύο τιμές 32-bit πουσυνδυάζονται για να δημιουργήσουν μια μεμονωμένη τιμή 64-bit.
   typedef struct _FILETIME {     DWORD dwLowDateTime;     DWORD dwHighDateTime;   } FILETIME;				
Σημειώστε ότι η δομή FILETIME βασίζεται σε διαστήματα των 100-δισεκατομμυριοστών του δευτερολέπτου. Αυτόείναι χρήσιμο για να ορίσετε τα παρακάτω σύμβολα, όταν εργάζεστε με αρχείο φορές.Για παράδειγμα:
   #define _SECOND ((int64) 10000000)   #define _MINUTE (60 * _SECOND)   #define _HOUR   (60 * _MINUTE)   #define _DAY    (24 * _HOUR)				

Εκτέλεση Arithmetics με χρόνους αρχείου

Συχνά είναι απαραίτητη για την εκτέλεση μιας απλούς αριθμητικούς αρχείο χρόνους. Γιαπαράδειγμα, ίσως χρειαστεί να γνωρίζετε πότε ένα αρχείο είναι 30 ημέρες. Για να εκτελέσετε μιααριθμητική τιμή σε μια ώρα του αρχείου, πρέπει να μετατρέψετε το FILETIME σε μια quadwordΕκτελέστε τον αριθμητικό (ένας ακέραιος 64-bit), και στη συνέχεια να μετατρέψετε το αποτέλεσμασε μια FILETIME.

Με την προϋπόθεση ότι ft είναι μια δομή FILETIME που περιέχει την ώρα δημιουργίας ενός αρχείου,το ακόλουθο δείγμα κώδικα προσθέτει 30 ημέρες το χρόνο:
   ULONGLONG qwResult;   // Copy the time into a quadword.   qwResult = (((ULONGLONG) ft.dwHighDateTime) << 32) + ft.dwLowDateTime;   // Add 30 days.   qwResult += 30 * _DAY;   // Copy the result back into the FILETIME structure.   ft.dwLowDateTime  = (DWORD) (qwResult & 0xFFFFFFFF );   ft.dwHighDateTime = (DWORD) (qwResult >> 32 );				

Καθορισμός χρόνου αρχείου

Μπορείτε να ορίσετε τις ώρες αρχείου για ένα αρχείο, χρησιμοποιώντας τη συνάρτηση SetFileTime().
   BOOL SetFileTime(     HANDLE hFile,                     // Handle to the file.     CONST FILETIME *lpCreationTime,   // Time the file was created.     CONST FILETIME *lpLastAccessTime, // Time the file was last accessed.     CONST FILETIME *lpLastWriteTime   // Time the file was last                                       // written to.   );				
Αυτή η λειτουργία σας επιτρέπει να τροποποιήσετε δημιουργίας, τελευταίας πρόσβασης και τελευταία εγγραφή φορέςχωρίς να αλλάξετε το περιεχόμενο του αρχείου. Για να χρησιμοποιήσετε αυτή τη λειτουργία, πρέπει ναέχετε ένα δείκτη χειρισμού για το άνοιγμα του αρχείου. Μπορείτε να αποκτήσετε αυτόν το δείκτη χειρισμού αρχείων από έναη κλήση για η δημιουργία αρχείων() ή OpenFile(). Το αρχείο πρέπει να ανοίξει μεGENERIC_WRITE πρόσβαση. Αφού ορίσετε τις ώρες αρχείο, θα πρέπει ναΑφήστε το δείκτη χειρισμού αρχείων μέσω μιας κλήσης στο CloseHandle().

Υποθέτοντας ότι το szFilename είναι ένα έγκυρο όνομα αρχείου και ft είναι μια δομή FILETIME, τοακολουθεί δείγμα κώδικα ορίζει την ημερομηνία δημιουργίας του αρχείου με το χρόνοπεριέχονται σε πόδια:
   BOOL bResult;   HANDLE hFile = CreateFile( szFilename,      GENERIC_WRITE, // The file must be opened with write access.      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL );   if (hFile != INVALID_HANDLE_VALUE) {      bResult = SetFileTime( hFile, &ft, NULL, NULL );      CloseHandle(hFile);   }				

Εμφάνιση της ώρας του αρχείου

Η ώρα του αρχείου βασίζεται σε Συντονισμένη παγκόσμια ώρα (UTC). Ώρα UTC με βάσηΧαλαρά, ορίζεται ως την τρέχουσα ημερομηνία και ώρα της ημέρας στο Greenwich,Αγγλία. Πιθανότατα θα θέλετε να εμφανίσετε την ώρα του αρχείου σε σχέση μεη τοπική ώρα (δηλαδή, την ημερομηνία και ώρα της ημέρας για τη ζώνη ώρας). Για νακάνετε αυτό, μπορείτε να χρησιμοποιήσετε το FileTimeToLocalFileTime() ως εξής:
   BOOL FileTimeToLocalFileTime(     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.     LPFILETIME lpLocalFileTime   // Pointer to converted file time.   );
Σημειώστε ότι αυτή η συνάρτηση χρησιμοποιεί τις τρέχουσες ρυθμίσεις για τη ζώνη ώρας καιΘερινή ώρα. Επομένως, εάν είναι η θερινή ώρα, αυτόσυνάρτηση θα συνεκτιμά χειμερινής / θερινής ώρας, ακόμη και αν ο χρόνος πουείναι η μετατροπή είναι με τη χειμερινή ώρα.

Για να εμφανίσετε την ώρα του αρχείου με λογικό τρόπο, πρέπει πρώτα να το μετατρέψετεμια ώρα συστήματος χρησιμοποιώντας το FileTimeToSystemTime() ως εξής:
   BOOL FileTimeToSystemTime(     CONST FILETIME *lpFileTime, // Pointer to file time to convert.     LPSYSTEMTIME lpSystemTime   // Pointer to structure to receive   );                            // system time.				
Η δομή SYSTEMTIME αντιπροσωπεύει μια ημερομηνία και ώρα χρησιμοποιώντας μεμονωμένατα μέλη της Δημοκρατίας του μήνα, ημέρα, έτος, εργάσιμη ημέρα, ώρα, λεπτό, δευτερόλεπτο, καιχιλιοστό του δευτερολέπτου.

Επίσης, είναι προτιμότερο να εμφανίζουν την ημερομηνία και την ώρα σε μια συνεπή μορφήμε την τρέχουσα γλώσσα που επιλέξατε για το σύστημα. Μπορείτε να το κάνετε χρησιμοποιώνταςGetDateFormat() και GetTimeFormat() ως εξής:
   int GetDateFormat(     LCID Locale,              // Locale for which date is to be formatted.     DWORD dwFlags,            // Flags specifying function options.     CONST SYSTEMTIME *lpDate, // Date to be formatted.     LPCTSTR lpFormat,         // Date format string.     LPTSTR lpDateStr,         // Buffer for storing formatted string.     int cchDate               // Size of buffer.   );   int GetTimeFormat(     LCID Locale,              // Locale for which time is to be formatted.     DWORD dwFlags,            // Flags specifying function options.     CONST SYSTEMTIME *lpTime, // Time to be formatted.     LPCTSTR lpFormat,         // Time format string.     LPTSTR lpTimeStr,         // Buffer for storing formatted string.     int cchTime               // Size of buffer.   );				
Μεταβιβάζοντας LOCALE_USER_DEFAULT ως η πρώτη παράμετρος αυτές τις συναρτήσεις,Ενημερώστε τους για να μορφοποιήσετε το που διαβιβάστηκε ημερομηνία/ώρα σύμφωνα με την προεπιλεγμένηη μορφή για την τρέχουσα γλώσσα. Στην περίπτωση αυτή, μπορείτε να περάσετε NULL τοΟι παράμετροι lpFormat.

Αν υποτεθεί ft είναι μια δομή FILETIME που περιέχει μια τιμή UTC, τα ακόλουθαδείγμα κώδικα εκτυπώνει την ημερομηνία που είναι αποθηκευμένα σε πόδια:
   SYSTEMTIME st;   char szLocalDate[255], szLocalTime[255];   FileTimeToLocalFileTime( &ft, &ft );   FileTimeToSystemTime( &ft, &st );   GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL,     szLocalDate, 255 );   GetTimeFormat( LOCALE_USER_DEFAULT, 0, &st, NULL, szLocalTime, 255 );   printf( "%s %s\n", szLocalDate, szLocalTime );				

Προειδοποίηση: Αυτό το άρθρο έχει μεταφραστεί αυτόματα

Ιδιότητες

Αναγνωριστικό άρθρου: 188768 - Τελευταία αναθεώρηση: 01/27/2011 18:22:00 - Αναθεώρηση: 2.0

Microsoft Win32 Application Programming Interface

  • kbapi kbdatetime kbfileio kbinfo kbkernbase kbmt KB188768 KbMtel
Σχόλια