2008-09-18 17 views
10

सी ++ बिल्डर 2007 का उपयोग करते हुए, FindFirstFile और FindNextFile फ़ंक्शन Vista और XP के 64-बिट संस्करणों पर कुछ फ़ाइलों को ढूंढने में सक्षम नहीं प्रतीत होते हैं। मेरा परीक्षण आवेदन 32-बिट है।FindNextFile 64-बिट विंडोज़ पर विफल रहता है?

यदि मैं उन्हें फ़ोल्डर C: \ Windows \ System32 \ ड्राइवर्स के माध्यम से पुन: उपयोग करने के लिए उपयोग करता हूं तो उन्हें केवल कुछ हद तक फाइलें मिलती हैं हालांकि 185 हैं जब मैं कमांड प्रॉम्प्ट में dir कमांड जारी करता हूं। उसी उदाहरण कोड का उपयोग करने से सभी फ़ाइलों को एक्सपी के 32-बिट संस्करण पर ठीक किया जाता है।

int main(int argc, char* argv[]) 
{ 
    HANDLE hFind; 
    WIN32_FIND_DATA FindData; 
    int ErrorCode; 
    bool cont = true; 

    cout << "FindFirst/Next demo." << endl << endl; 

    hFind = FindFirstFile("*.*", &FindData); 
    if(hFind == INVALID_HANDLE_VALUE) 
    { 
    ErrorCode = GetLastError(); 
    if (ErrorCode == ERROR_FILE_NOT_FOUND) 
    { 
     cout << "There are no files matching that path/mask\n" << endl; 
    } 
    else 
    { 
     cout << "FindFirstFile() returned error code " << ErrorCode << endl; 
    } 
    cont = false; 
    } 
    else 
    { 
    cout << FindData.cFileName << endl; 
    } 

    if (cont) 
    { 
    while (FindNextFile(hFind, &FindData)) 
    { 
     cout << FindData.cFileName << endl; 
    } 

    ErrorCode = GetLastError(); 
    if (ErrorCode == ERROR_NO_MORE_FILES) 
    { 
     cout << endl << "All files logged." << endl; 
    } 
    else 
    { 
     cout << "FindNextFile() returned error code " << ErrorCode << endl; 
    } 

    if (!FindClose(hFind)) 
    { 
     ErrorCode = GetLastError(); 
     cout << "FindClose() returned error code " << ErrorCode << endl; 
    } 
    } 
    return 0; 
} 

सी में यह चल रहा है::

C:\WINDOWS\system32\drivers>t:\Project1.exe 
FindFirst/Next demo. 

. 
.. 
AsIO.sys 
ASUSHWIO.SYS 
hfile.txt 
raspti.zip 
stcp2v30.sys 
truecrypt.sys 

All files logged. 

एक dir कमांड पर: \ Windows \ System32 \ ड्राइवर 64-बिट XP पर फ़ोल्डर इस रिटर्न

यहाँ एक छोटा सा उदाहरण कार्यक्रम है एक ही सिस्टम यह देता है:

C:\WINDOWS\system32\drivers>dir/p 
Volume in drive C has no label. 
Volume Serial Number is E8E1-0F1E 

Directory of C:\WINDOWS\system32\drivers 

16-09-2008 23:12 <DIR>   . 
16-09-2008 23:12 <DIR>   .. 
17-02-2007 00:02   80.384 1394bus.sys 
16-09-2008 23:12    9.453 a.txt 
17-02-2007 00:02   322.560 acpi.sys 
29-03-2006 14:00   18.432 acpiec.sys 
24-03-2005 17:11   188.928 aec.sys 
21-06-2008 15:07   291.840 afd.sys 
29-03-2006 14:00   51.712 amdk8.sys 
17-02-2007 00:03   111.104 arp1394.sys 
08-05-2006 20:19    8.192 ASACPI.sys 
29-03-2006 14:00   25.088 asyncmac.sys 
17-02-2007 00:03   150.016 atapi.sys 
17-02-2007 00:03   106.496 atmarpc.sys 
29-03-2006 14:00   57.344 atmepvc.sys 
17-02-2007 00:03   91.648 atmlane.sys 
17-02-2007 00:03   569.856 atmuni.sys 
24-03-2005 19:12    5.632 audstub.sys 
29-03-2006 14:00    6.144 beep.sys 
Press any key to continue . . . 
etc. 

मुझे परेशान है। इसका कारण क्या है?

ब्रायन

उत्तर

9

है वहाँ पुनर्निर्देशन चल रहा है? Wow64DisableWow64FsRedirection http://msdn.microsoft.com/en-gb/library/aa365743.aspx

+0

क्या सी में फ़ाइलें हैं: \ Windows \ System64 \ ड्राइवर? –

+0

मैं सी: \ विंडोज \ System32 \ ड्राइवर्स में फ़ाइलों को सूचीबद्ध करता हूं लेकिन वास्तव में सी: \ विंडोज \ SysWOW64 \ ड्राइवर्स में फ़ाइलों को प्राप्त करता है :-) – JubbaJubba

0

आप यकीन है कि यह dir कमांड उसी निर्देशिका में लग रही है कर रहे हैं? ऐसा लगता है कि उनमें कोई भी फाइल सामान्य नहीं है।

इसके अलावा, इस मुद्दे हैं, लेकिन "सभी फाइलों" के लिए सही वाइल्ड कार्ड नहीं है *

है *। * का अर्थ है "कम से कम एक साथ सभी फ़ाइलों। नाम में"

0

पर टिप्पणियां देखें जब आप संकलित करते हैं तो क्या कोई चेतावनी है?

क्या आपने सभी इस विशेष परीक्षण के लिए चेतावनियां चालू की हैं (क्योंकि यह काम नहीं कर रही है)?

सुनिश्चित करें कि चेतावनियों को हल करने के लिए पहले सुनिश्चित करें।

0

उदाहरण कोड के साथ कोई समस्या नहीं है। मेरे पास एक और एप्लीकेशन है जो डेल्फी में लिखा गया है। मुझे लगता है कि मैं इस सवाल का जवाब पुनर्निर्देशन के बारे में क्रिस 'जवाब के आधार पर पाया: http://msdn.microsoft.com/en-gb/library/aa364418(VS.85).aspx

2

मैं MSDN पर इस पाया:

आप एक निर्देशिका में सभी फ़ाइलों को सूचीबद्ध करने के लिए एक 32-बिट आवेदन लिख रहे हैं, तो और एप्लिकेशन 64-बिट कंप्यूटर पर चलाया जा सकता है, आपको FindFirstFile को कॉल करने से पहले Wow64DisableWow64FsRedirectionFunction को कॉल करना चाहिए और FindNextFile पर अंतिम कॉल के बाद Wow64RevertWow64FsRedirection को कॉल करना चाहिए। अधिक जानकारी के लिए, फ़ाइल सिस्टम रीडायरेक्टर देखें।

Here's the link

मैं इस :-) की वजह से

0

समझ गया मेरे कोड से अपडेट करना होगा:

http://msdn.microsoft.com/en-gb/library/aa384187(VS.85).aspx

एक 32-बिट आवेदन में से एक से पढ़ता है जब 64-बिट ओएस पर ये फ़ोल्डर्स:

%windir%\system32\catroot 
%windir%\system32\catroot2 
%windir%\system32\drivers\etc 
%windir%\system32\logfiles 
%windir%\system32\spool 
अपने इनपुट क्रिस, कि मुझे पता लगाना क्या चल रहा है मदद की के लिए

%windir%\SysWOW64\catroot 
%windir%\SysWOW64\catroot2 
%windir%\SysWOW64\drivers\etc 
%windir%\SysWOW64\logfiles 
%windir%\SysWOW64\spool 

धन्यवाद:

विंडोज वास्तव में की सामग्री को सूचीबद्ध करता है।

संपादित करें: यदि आप लुडविग भी :-) धन्यवाद

संबंधित मुद्दे