2011-07-14 28 views
15

Winforms uygulamasını kullanarak ağ üzerinden büyük bir dosya kopyalayacağım ve bir çeşit ilerleme çubuğu göstermem gerekiyor. Kendi kopyalama rutinimi hazırlamak yerine, yerleşik dosya kopyalama diyaloğunu göstermenin daha iyi olabileceğini düşünüyordum.Yerleşik Dosya Kopyalama iletişim kutusu nasıl açılır?

Ayrıca "Kopyalama tamamlandı" ve "Kopyalama başarısız" bildirimlerine de ihtiyacım var.

Windows XP, Vista ve 7 üzerinde çalışmak için buna ihtiyacım var. Bu işlevselliği C# kodumdan almak için çağrı yapmanın bir yolu var mı? alınan

+0

olası yinelenen Win32 bir kopyasını?] (http://stackoverflow.com/questions/5729808/how-do-i-invoke-the-shell-file-copy-dialog-to-report-the-progress-of-a- copy-in) –

+0

yerine 'xcopy' veya 'robocopy' kullanabilirsiniz. Olası kopya http://stackoverflow.com/q/3124038/380384 – ja72

+0

Çerçevenin bunun için bir desteği olup olmadığını bilmiyorum, [SHFileOperation()] 'ı çağırmak zorunda kalabilirsiniz (http://msdn.microsoft) .com/en-us/library/bb762164.aspx) işlevi. –

cevap

17

Cevap: http://msdn.microsoft.com/en-us/magazine/cc163304.aspx

Windows Vista gerçekten Yapmanız aradığınızı tam olarak destekleyen yeni bir kopya motoru içermez. Bununla birlikte, daha önce var olan işlevselliğin ihtiyaçlarınızı karşılaması mümkündür. Örneğin, tek bir dosyayı veya dizini kopyalamak, taşımak, yeniden adlandırmak ya da silmek isterseniz, Visual Basic® çalışma zamanı tarafından sarılmış olan SHFileOperation (shell32.dll dosyasından) 'dan yararlanabilirsiniz. Visual Basic 2005 kullanıyorsanız, sadece örneğin benim ad alanından işlevini kullanabilirsiniz:

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

sadece biraz daha çalışma gerektirir C# aynı şeyi olanı başarmak, Microsoft.VisualBasic bir başvuru ekleyerek. gibi (Microsoft® .NET Framework yükleme dizininde) dll ve kodu kullanarak şu: çalıştırdığınızda

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

, bu aynı dosya işlemlerini yaptıklarını halinde ulaşacağınızı aynı ilerleme UI sonuçlanacaktır Windows Gezgini'nden. Windows Vista çalışırken Şekilde gösterildiği gibi Aslında, otomatik, yeni Pencere Vista ilerleme UI olsun 1. Dialog

[nasıl ilerleme kaydedilmesine "dosya kopyalama diyalog" kabuk çağırmak ait
+2

Bir kaynak belirtildiğinde, kaynağı blok tırnak içinde belirtin. Başka bir bağlam veya açıklama yapmadan başka bir şeyi alıntılayan cevaplar genellikle kaşlarını çattılar. –

+0

Çoğunlukla alıntı yapıldı, ancak verbatim değil. Kısaltmalar için yapılan bazı düzenlemeler yapıldı ve bu yüzden engellemeye karar vermedim. Son zamanlarda yayını düzenledim, toplumu daha mutlu edecek. – ja72

+0

Yanıtınızda sağladığınız GUI ilerleme iletişim kutusunu görüntüleyen bir yedekleme ve geri yükleme işlevleri yazmam gerekiyor, ancak çalışma zamanı veya çerçeve gerektirmeyen derlenmiş bir exe'yi tercih ediyorum. Bu, win32 C++ (visual-C++) ile başarılabilir mi? .. Eğer doğruysa, sorun görsel-C++ 'da nasıl yazacağımı bilmiyorum. –

İlgili konular