webForumDet fria alternativet

Söka igenom en katalog?

C/C++

6 svar · 282 visningar · startad av BABBA

Medlem sedan feb. 2000280 inlägg
Frågan#1

Hej

C++
--------
Hur gör jag för att söka igenom en katalog och lista filerna / spara i en matris?

Tack på förhand

Medlem sedan juni 200010 432 inlägg
#2

Operativ, plattform?

Förresten är det en ganska dålig ide att spara det i en matris då det finns en uppenbar risk att det är ganska mycket som ska sparas och tidsåtgången att vandra igenom en matris blir relativt stor. Bättre med ett träd eller en hashtabell ;)

Medlem sedan feb. 2000280 inlägg
#3

Operativ, plattform?

Tänkte använda mig av de kaptalistiska produkterna win2k och Visual C++ 6 för att lösa det hela.

Jag är totalt ny på C++, men jag skulle utan probs kunna lösa det i ex. PHP så jag hoppas jag förstår teorin iaf..

Skulle du (PeW) kunna ge ett lätt exempel?

Cheers / Babba

Medlem sedan maj 20021 466 inlägg
#4

Använd funktionerna FindFirstFile/FindNextFile. I dokumentationen står det hur de ska användas. Om du kan lite C klarar du nog av det, om inte, så kanske du bör plugga lite först.

Återkom om du får problem.

Medlem sedan juni 200010 432 inlägg
#5

Skulle du (PeW) kunna ge ett lätt exempel

Just nu är jag inte i närheten av en burk med VS installerat (jag är på semester)... men om du har hjälpen installerat finns det exempel där. Det finns även en hel del siter för att kolla på exempel. Som t.ex https://www.codeproject.com & http://www.relisoft.com/

Men det är en stor skillnad på php & windowsprogrammering så en bok i ämnet är inte fel ;) Som t.ex "Programming windows with MFC" av Jeff Pro... *nånting*

Medlem sedan okt. 20013 217 inlägg
#6

Med lite modifieringar så borde dett funka :

The following example copies all text files in the current directory to a new directory of read-only files named \TEXTRO. Files in the new directory are changed to read only, if necessary. 

The application uses the GetCurrentDirectory function to retrieve the current directory path. This function is also used to return to the current directory after changing to the \TEXTRO directory. 

The application then creates the \TEXTRO directory by using the CreateDirectory function. 

The application searches the current directory for all .TXT files by using the FindFirstFile and FindNextFile functions. Each .TXT file is copied to the \TEXTRO directory. After a file is copied, the GetFileAttributes function determines whether the file is read only. If the file is not read only, the application changes directories to \TEXTRO and converts the copied file to read only by using the SetFileAttributes function. 

After all .TXT files in the current directory have been copied, the application closes the search handle by using the FindClose function. 

WIN32_FIND_DATA FileData; 
HANDLE hSearch; 
DWORD dwAttrs; 
char szDirPath[] = "c:\\TEXTRO\\"; 
char szNewPath[MAX_PATH]; 
char szHome[MAX_PATH]; 
 
BOOL fFinished = FALSE; 
 
// Create a new directory. 
 
if (!CreateDirectory(szDirPath, NULL)) 
{ 
    ErrorHandler("Couldn't create new directory."); 
} 
 
// Start searching for .TXT files in the current directory. 
 
hSearch = FindFirstFile("*.txt", &FileData); 
if (hSearch == INVALID_HANDLE_VALUE) 
{ 
    ErrorHandler("No .TXT files found."); 
} 
 
// Copy each .TXT file to the new directory 
// and change it to read only, if not already. 
 
while (!fFinished) 
{ 
    lstrcpy(szNewPath, szDirPath); 
    lstrcat(szNewPath, FileData.cFileName); 
    if (CopyFile(FileData.cFileName, szNewPath, FALSE))
    { 
        dwAttrs = GetFileAttributes(FileData.cFileName); 
        if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) 
        { 
            SetFileAttributes(szNewPath, 
                dwAttrs | FILE_ATTRIBUTE_READONLY); 
        } 
    } 
    else 
    { 
        ErrorHandler("Couldn't copy file."); 
    } 
 
    if (!FindNextFile(hSearch, &FileData)) 
    {
        if (GetLastError() == ERROR_NO_MORE_FILES) 
        { 
            MessageBox(hwnd, "No more .TXT files.", 
                "Search completed.", MB_OK); 
            fFinished = TRUE; 
        } 
        else 
        { 
            ErrorHandler("Couldn't find next file."); 
        } 
    }
} 
 
// Close the search handle. 
 
if (!FindClose(hSearch)) 
{ 
    ErrorHandler("Couldn't close search handle."); 
}
Medlem sedan feb. 2000280 inlägg
#7

Tack för hjälpen! Ska testa och se om jag får det att funka =)

249 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)