كيفية الحصول على المجموعة الأولى من بيانات الدليل في الدهون باستخدام C# (أو على الأقل C ++) و Win32API؟

StackOverflow https://stackoverflow.com/questions/2704277

سؤال

لذلك لدي محرك دهن ، دعنا نقول H: ودليل "عمل" (المسار الكامل "H: Work"). أحتاج إلى الحصول على عدد المجموعة الأولى من هذا الدليل. عدد الكتلة الأولى هو قيمة 2-BYTES ، التي يتم تخزينها في البايتات 26 و 27 من المجلد Enty (Wich هو 32 بايت).

دعنا نقول إنني أفعل ذلك مع الملف ، وليس دليلًا. يمكنني استخدام رمز مثل هذا:

 static public string GetDirectoryPtr(string dir)
    {

        IntPtr ptr = CreateFile(@"H:\Work\dover.docx",
            GENERIC_READ,
            FILE_SHARE_READ | FILE_SHARE_WRITE,
            IntPtr.Zero,
            OPEN_EXISTING,
            0,//FILE_FLAG_BACKUP_SEMANTICS, 
            IntPtr.Zero);
        try
        {
            const uint bytesToRead = 2;
            byte[] readbuffer = new byte[bytesToRead];
            if (ptr.ToInt32() == -1) return String.Format("Error: cannot open direcotory {0}", dir);
            if (SetFilePointer(ptr, 26, 0, 0) == -1) return String.Format("Error: unable to set file pointer on file {0}", ptr);

            uint read = 0; // real count of read bytes
            if (!ReadFile(ptr, readbuffer, bytesToRead, out read, 0)) return String.Format("cant read from file {0}. Error #{1}", ptr, Marshal.GetLastWin32Error());                
            int result = readbuffer[0] + 16 * 16 * readbuffer[1];
            return result.ToString();//ASCIIEncoding.ASCII.GetString(readbuffer);

        }
        finally
        {
            CloseHandle(ptr);
        }
    }

وسوف يعيد بعض الأرقام ، مثل 19 (حقيقي تمامًا بالنسبة لي ، هذا هو الملف الوحيد على القرص).

لكني لست بحاجة إلى ملف ، أحتاج إلى مجلد. لذلك أنا puttin file_flag_backup_semantics param ل CreateFile Call ... ولا أعرف ماذا تفعل بعد ذلك. هل هناك أي طريقة لجعلها تعمل في مجلد؟

MSDN واضح جدا في هذه المسألة http://msdn.microsoft.com/en-us/library/AA365258(V=VS.85).aspx

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

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

هل كانت مفيدة؟

المحلول

لذلك إذا فهمت بشكل صحيح ، فأنت تريد قراءة الدهون والحصول على المجموعة الأولى من الدليل على القرص؟

إذا كان ما سبق صحيحًا ، فقد يكون من الأفضل فتح مستوى الصوت للوصول المباشر.
http://msdn.microsoft.com/en-us/library/aa363858(vs.85).aspx
انظر القسم على الأقراص والأحجام النباتية.

بمجرد فتح مستوى الصوت ، يمكنك قراءة قطاعات القرص ومسح الدهون لتحديد موقع الإدخال للدليل الذي تهتم به.

فيما يلي عينة من استخدام deiceiocontrol لقراءة هندسة القرص.http://msdn.microsoft.com/en-us/library/AA363147(VS.85).aspx

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top