Kopiowanie folderu wraz z zawartością

0

Witam.

Mam następujący kod:


if (!System.IO.File.Exists("settings.xml"))
            {
                settings _settings = new settings();
                _settings.ShowDialog();
            }

            if (System.IO.File.Exists("settings.xml"))
            {
                string fileName = "";

                XmlDocument settings_load = new XmlDocument();
                settings_load.Load("settings.xml");
                XmlNode sourceNode = settings_load.DocumentElement.SelectSingleNode("/settings/source");
                XmlNode targetNode = settings_load.DocumentElement.SelectSingleNode("/settings/target");

                string sourceFolder = sourceNode.InnerText;
                string targetFolder = targetNode.InnerText;
                string sourceFile = System.IO.Path.Combine(sourceFolder, fileName);
                string targetFile = System.IO.Path.Combine(targetFolder, fileName);

                if (!System.IO.Directory.Exists(targetFolder))
                {
                    System.IO.Directory.CreateDirectory(targetFolder);
                }

                if (System.IO.Directory.Exists(sourceFolder))
                {
                    string[] files = System.IO.Directory.GetFiles(sourceFolder);

                    foreach (string s in files)
                    {
                        fileName = System.IO.Path.GetFileName(s);
                        targetFile = System.IO.Path.Combine(targetFolder, fileName);
                        System.IO.File.Copy(s, targetFile, true);
                    }
                }
                MessageBox.Show("Kopiowanie zakończone", "Informacja",
                MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
            }
            else
            {
                MessageBox.Show("Błędna konfiguracja", "Błąd",
                MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }

Program kopiuje tylko zawartość wskazanego folderu bez innych folderów z ich zawartością (poziomów podfolderów jest 2).

Jak zrobić by kopiował wszystko?

0

Super tylko wyskakuje błąd przy nadpisaniu że taki plik istnieje. Chce by za każdym razem nadpisywało.

0

Pliki są już kopiowane tylko przy nadpisywaniu jednego pliku wyskakuje mi błąd:

Odmowa dostępu dla ścieżki: F:/program.exe

 Szczegółowe informacje na temat wywoływania debugowania w trybie JIT (just in time)
zamiast tego okna dialogowego znajdują się na końcu tego komunikatu.

************** Tekst wyjątku **************
System.UnauthorizedAccessException: Odmowa dostępu do ścieżki „F:\PKUNZIP.EXE”.
   w System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   w System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)
   w System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite)
   w yBack.mainmenu.CopyDirectory(String _sourceFolder, String _targetFolder)
   w yBack.mainmenu.button_backup_Click(Object sender, EventArgs e)
   w System.Windows.Forms.Control.OnClick(EventArgs e)
   w System.Windows.Forms.Button.OnClick(EventArgs e)
   w System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   w System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   w System.Windows.Forms.Control.WndProc(Message& m)
   w System.Windows.Forms.ButtonBase.WndProc(Message& m)
   w System.Windows.Forms.Button.WndProc(Message& m)
   w System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   w System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   w System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Zestawy załadowane **************
mscorlib
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.1586.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
yBack
    Wersja zestawu: 1.0.0.1
    Wersja Win32: 1.0.0.1
    CodeBase: file:///C:/YBack/yBack.exe
----------------------------------------
System.Windows.Forms
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.1586.0 built by: NETFXREL2
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.1586.0 built by: NETFXREL2
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.1586.0 built by: NETFXREL2
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Xml
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.1586.0 built by: NETFXREL2
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
mscorlib.resources
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.1586.0 built by: NETFXREL2
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_pl_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
System.Windows.Forms.resources
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.1586.0 built by: NETFXREL2
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_pl_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

************** Debugowanie w trybie JIT **************
Aby włączyć debugowanie w trybie just in time (JIT), plik .config tej
aplikacji lub komputera (machine.config) musi mieć
wartość jitDebugging ustawioną w sekcji system.windows.forms.
Aplikacja musi być również skompilowana z włączonym
debugowaniem.

Na przykład:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

Gdy debugowanie JIT jest włączone, wszystkie nieobsługiwane wyjątki
są wysyłane do debugera JIT zarejestrowanego na komputerze
i nie są obsługiwane w tym oknie dialogowym.

Jak zrobić by ten program nie był ruszany gdy już istnieje?

Kody w stylu :

                 if (file != "PKUNZIP.EXE")
                {
                    File.Copy(file, dest, true);
                }
                if (file == "*.EXE")
                {
                    File.Copy(file, dest, false);
                }
                else
                {
                    File.Copy(file, dest, true);
                } 

Nie działają

0

Czy ktoś zna odpowiedź?

0

Jak zrobić by ten program nie był ruszany gdy już istnieje?
nie rozumiem tego zdania

Zakladam ze chodzi Ci o sprawdzenie czy dany plik juz istenieje

File.Exists("Tutaj pelna sciezka do Twojego pliku") 

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0