أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

INFO: التعامل مع بنية FILETIME

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية188768
الموجز
يمثل وقت ملف محددة التاريخ والوقت عنده ملف معطى تم إنشاء آخر الوصول إليها أو كتابة آخر. يتم تخزين وقت ملف في بنية FILETIME. يتم استخدام هذه البنية مع عدة استدعاءات Win32 API.
معلومات أخرى
بنية FILETIME يمثل عدد الفواصل الزمنية 100 nanosecond منذ 1 يناير 1601. تتألف البنية القيمتين 32-بت ضم لتكوين قيمة 64-بت واحدة.
   typedef struct _FILETIME {     DWORD dwLowDateTime;     DWORD dwHighDateTime;   } FILETIME;				
ملاحظة تستند بنية FILETIME الفواصل الزمنية 100 nanosecond. يكون من المفيد على تعريف الرموز التالية عند العمل مع الملف مرات. على سبيل المثال:
   #define _SECOND ((int64) 10000000)   #define _MINUTE (60 * _SECOND)   #define _HOUR   (60 * _MINUTE)   #define _DAY    (24 * _HOUR)				

تنفيذ Arithmetics مع ملف الأوقات

من الضروري عادة تنفيذ الحسابي بسيطة على أوقات الملف. على سبيل المثال، قد تحتاج إلى معرفة عندما يكون هناك ملف 30 يوماً القديم. لتنفيذ الحسابي على وقت ملف التي تحتاج لتحويل في FILETIME إلى quadword (64-بت عدداً) ، تنفيذ في الحساب ثم قم بتحويل الناتج إلى FILETIME.

على فرض قدم بنية 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.   );				
هذه الدالة يسمح لك تعديل إنشاء آخر الوصول إلى آخر كتابة مرات دون تغيير محتوى الملف. لاستخدام هذه الوظيفة يجب أن يكون لديك مؤشر الملف المفتوح. يمكن الحصول على مؤشر هذا الملف من استدعاء CreateFile() أو OpenFile(). يجب فتح الملف مع وصول GENERIC_WRITE. بعد تعيين أوقات الملف يجب تحرير مؤشر الملف خلال استدعاء CloseHandle().

szFilename assuming اسم ملف صالح قدم بنية 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);   }				

عرض الأوقات ملف

يستند وقت الملف coordinated الوقت العالمي (UTC). يتم تعريف الوقت المستندة إلى UTC والمتصلة مثل التاريخ الحالي والوقت من اليوم في جرينتش ، بإنجلترا. ستحتاج على الأرجح لعرض وقت الملف مع الإشارة إلى الوقت المحلي (أي، التاريخ والوقت من اليوم المنطقة الزمنية). للقيام بذلك، يمكنك استخدام 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.

على فرض قدم بنية 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/23/2007 19:28:47 - المراجعة: 3.3

Microsoft Win32 واجهة برمجة تطبيقات

  • kbmt kbapi kbdatetime kbfileio kbinfo kbkernbase KB188768 KbMtar
تعليقات
/html>html>//c1.microsoft.com/c.gif?DI=4050&did=1&t=">&t=">1&t=">/html>