2011-07-14 28 views
15

Będę kopiować duży plik przez sieć za pomocą mojej aplikacji WinForm i muszę pokazać pasek postępu. Zamiast gotować własną procedurę kopiowania, pomyślałem, że może lepiej po prostu pokazać wbudowane okno dialogowe kopiowania plików.Jak wyświetlić wbudowane okno dialogowe kopiowania plików?

Potrzebuję również powiadomienia "Kopiowanie kompletne" i "Kopiowanie nie powiodło się".

Potrzebuję tego do pracy w systemie Windows XP, Vista i 7. Czy istnieje sposób wywołania, aby włączyć tę funkcję z mojego kodu C#?

+0

możliwy duplikat [Jak mogę wywołać okno dialogowe "kopia pliku powłoki", aby zgłosić postęp kopii w Win32?] (http://stackoverflow.com/questions/5729808/how-do-i-invoke-the-shell-file-copy-dialog-to-report-the-progress-ofa-a- odpis) –

+0

zamiast tego lepiej użyć 'xcopy' lub' robocopy'. Możliwy duplikat http://stackoverflow.com/q/3124038/380384 – ja72

+0

Nie wiem, czy framework obsługuje taką obsługę, może być konieczne wywołanie funkcji [SHFileOperation()] (http://msdn.microsoft) .com/en-us/library/bb762164.aspx). –

Odpowiedz

17

odpowiedzi pochodzą z: http://msdn.microsoft.com/en-us/magazine/cc163304.aspx

Windows Vista rzeczywiście to nowy silnik, który obsługuje kopiowania dokładnie to, czego szukasz zrobić. Możliwe jednak, że poprzednia istniejąca funkcjonalność może zaspokoić Twoje potrzeby. Na przykład, jeśli chcesz skopiować, przenieść, zmienić nazwę lub usunąć pojedynczy plik lub katalog, możesz skorzystać z funkcji SHFileOperation (wyeksponowanej z powłoki shell32.dll), która jest już zapakowana w środowisko wykonawcze Visual Basic. Jeśli używasz Visual Basic 2005, można po prostu użyć funkcji z Mojego nazw, na przykład:

My.Computer.FileSystem.CopyDirectory(
    sourcePath, destinationPath, UIOption.AllDialogs) 

Osiągnięcie samo w C# wymaga tylko trochę więcej pracy, dodając odniesienie do Microsoft.VisualBasic. DLL (z katalogu instalacyjnego programu Microsoft® .NET Framework) i za pomocą kodu, takich jak:

using Microsoft.VisualBasic.FileIO; 
... 
FileSystem.CopyDirectory(
    sourcePath, destinationPath, UIOption.AllDialogs); 

po uruchomieniu spowoduje to w tym samym interfejsie postępu chcesz zobaczyć, czy robisz te same operacje na plikach z Eksploratora Windows. W rzeczywistości podczas pracy w systemie Windows Vista automatycznie uzyskuje się nowy interfejs użytkownika postępu w systemie Windows Vista, jak pokazano na rysunku 1. Dialog

+2

Cytując źródło, cytuj źródło w cytatach blokowych. Odpowiedzi, które tylko cytują coś innego bez dodatkowego kontekstu lub wyjaśnienia, są generalnie mile widziane. –

+0

Przeważnie jest cytowany, ale nie dosłownie. Niektóre zmiany wprowadzono dla zwięzłości, dlatego postanowiłem nie blokować. Niedawno zredagowałem stanowisko, aby społeczność była szczęśliwsza. – ja72

+0

Potrzebuję napisać kopię zapasową i przywrócić urządzenie użytkowe, które wyświetla okno dialogowe postępu GUI podanego w odpowiedzi, ale wolą skompilowany plik exe, który nie wymaga środowiska wykonawczego ani frameworka. Czy można to osiągnąć dzięki win32 C++ (visual-C++)? .. Jeśli to prawda, problem polega na tym, że nie wiem jak napisać to w visual-C++ –

Powiązane problemy