Możesz łatwo kopiować, przenosić i usuwać pliki poprzez wywołania funkcji API CopyFile, DeleteFile i MoveFile. Te funkcje są łatwe w użyciu, ale nie wyświetlają okienek z "latającymi folderami". Oto ich przykłady: // kopiuje SOURCE.TXT do DEST.TXT, argument true mówi windows // żeby nie doszło do operacji gdy DEST.TXT już istnieje. if( CopyFile("C:\\SOURCE.TXT","C:\\DEST.TXT", true) == FALSE) Application->MessageBox("CopyFile nie wyszło", "Error", MB_OK); // MoveFile i DeleteFile także zwracają FALSE przy błędzie. MoveFile("C:\\SOURCE.TXT","C:\\WINDOWS\\TEMP\\DEST.TXT"); DeleteFile("C:\\SOURCE.TXT");Aby uzyskać "latające foldery", musisz użyć funkcji API SHFileOperation. Oto te same przykłady co wyżej, ale z wykorzystaniem funkcji SHFileOperation. #include <shellapi.h> // kopiuje SOURCE.TXT do DEST.TXT; char *From = "C:\\SOURCE.TXT\0"; char *To = "C:\\DEST.TXT\0"; SHFILEOPSTRUCT op; op.hwnd = Handle; // uchwyt głównej formy aplikacji op.wFunc = FO_COPY; op.pFrom = From; op.pTo = To; op.fFlags= 0; SHFileOperation( &op); // przenosi SOURCE.TXT do katalogu windows temp char *From = "C:\\SOURCE.TXT\0"; char *To = "C:\\WINDOWS\\TEMP\0"; SHFILEOPSTRUCT op; op.hwnd = Handle; op.wFunc = FO_MOVE; op.pFrom = From; op.pTo = To; op.fFlags= 0; SHFileOperation( &op); // wysyła pliki z folderu temp do kosza char *File = "C:\\windows\\temp\\*.TMP\0"; SHFILEOPSTRUCT op; op.hwnd = Handle; op.wFunc = FO_DELETE; op.pFrom = File; op.fFlags= FOF_ALLOWUNDO; SHFileOperation( &op); // kopiuje wszystkie pliki tekstowe do katalogu temp char *From = "C:\\*.TXT\0"; char *To = "C:\\WINDOWS\\TEMP\0"; SHFILEOPSTRUCT op; op.hwnd = Handle; op.wFunc = FO_COPY; op.pFrom = From; op.pTo = To; op.fFlags= 0; SHFileOperation( &op);Uwagi: 1. Kiedy wykorzystujesz FO_DELETE, pliki zostaną wysłane do kosza, pod warunkiem, że fFlags zawiera styl FOF_ALLOWUNDO. Inaczej będą skasowane. 2. Pozycje pFrom i pTo są wskaźnikami do char. Nie są tablicami. Muszą wskazywać na string, ale struktura nie zawiera pamięci do przechowywania tegoż stringu. Nie rób tego w ten sposób: op.pFrom = "C:\\*.TXT"; op.pTo = "C:\\TEMP";3. Zauważ dodatkowy terminator NULL (dodane /0) w stringu. Dokumentacja MSDN mówi, że stringi pTo i pFrom muszą być zakończone podwójnym NULL. 4. pTo i pFrom mogą zawierać więcej niż jeden string. Każdy string powinien być oddzielony terminatorem NULL. Oto przykład: char *From = "C:\\*.txt\0C:\\*.log\0C:\\*.tmp\0"; op.pFrom = From; char *From = "C:\\*.txt\0" "C:\\*.log\0" "C:\\*.tmp\0";5. Kiedy kopiujesz albo przenosisz pliki, styl FOF_RENAMEONCOLLISION w parametrze fFlags zapobiegnie nadpisaniu innych plików. Zostaną stworzone kopie "Kopia readme.txt" (tak jak robi to explorer). 6. Możesz także określić FO_RENAME jako parametr wFunc. Pojemnik fFlags może zawierać wiele zaawansowanych stylów. Sprawdź plik WIN32.HLP. |