2012-08-02 49 views
0

我正在嘗試構建一個自動備份和還原系統。System.UnauthorizedAccessException:訪問路徑C

我的日誌文件:

2012-08-02 22:34:06 - Init: Folder main created for server Teamdeathmatch 
2012-08-02 22:34:06 - Backup: Couldn't copy files: System.UnauthorizedAccessException: Access to the path 'C:/temp/backups/Teamdeathmatch/server/main' is denied. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite) 
    at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite) 
    at BackupRollback.Backup.getServerFiles() in C:\Users\jordi\Desktop\ConsoleApplication1 - kopie\Backup.cs:line 51 

目標和文件存在。

我希望任何人都可以幫助我。還有一些關於我自c-sharp編程的反饋對我來說是新的。

謝謝

class Backup 
{ 

    public static void getServerFiles() 
    { 

     Log.Info("Get servers"); 
     string[] fileEntries = Directory.GetDirectories("c:/Gameservers"); 

     Log.Info("Servers found: " + fileEntries.Count()); 

     string _directoryPath = @"C:\temp\backups"; 

     // check folder exists 
     if (!Directory.Exists(_directoryPath)) 
     { 
      Log.Data("Temp backup folder not found"); 
      Directory.CreateDirectory(_directoryPath); 
      Log.Data("Temp backup folder created successfully"); 

     } 
     else 
     { 
      Log.Data("Temp backup folder found"); 
     } 

     // move files to directory 
     foreach (string fileName in fileEntries) 
     { 
      try 
      { 
       string servername = Path.GetFileNameWithoutExtension(fileName); 

       Directory.CreateDirectory("C:/temp/backups/" + servername + "/server"); 
       Log.Data("Folder server created for server " + servername); 

       Directory.CreateDirectory("C:/temp/backups/" + servername + "/server/main"); 
       Log.Data("Folder main created for server " + servername); 

       File.Copy("C:/temp/backups/" + servername + "/server/main", "C:/Gameservers/" + servername + "/server/main/server.cfg"); 
       Log.Data("File server.cfg copied for server " + servername); 

       Directory.CreateDirectory("C:/temp/backups/" + servername + "/b3 server/conf"); 
       Log.Data("Folder conf [b3] created for server " + servername); 

       File.Copy("C:/temp/backups/" + servername + "/server/main", "C:/Gameservers/" + servername + "/b3 server/conf/b3.xml"); 
       Log.Data("File b3.xml copied for server " + servername); 

       Directory.CreateDirectory("C:/temp/backups/" + servername + "/server/mods"); 
       Log.Data("Folder mods created for server " + servername); 

       DirectoryCopy("C:/temp/backups/" + servername + "/server/", "C:/Gameservers/mods/" + servername + "/server/mods/"); 
       Log.Data("Folder mods copied for server " + servername); 
      } 

      catch (Exception ex) 
      { 
       Log.Data("Couldn't copy files: " + ex.ToString()); 
      } 
     } 


    } 

    private static void DirectoryCopy(string sourceDirName, string destDirName) 
    { 
     DirectoryInfo dir = new DirectoryInfo(sourceDirName); 
     DirectoryInfo[] dirs = dir.GetDirectories(); 

     FileInfo[] files = dir.GetFiles(); 

      foreach (FileInfo file in files) 
      { 
      string temppath = Path.Combine(destDirName, file.Name); 

      file.CopyTo(temppath, false); 
     } 

     foreach (DirectoryInfo subdir in dirs) 
     { 
      string temppath = Path.Combine(destDirName, subdir.Name); 

      DirectoryCopy(subdir.FullName, temppath); 
     } 
    } 

}

+0

你正在運行這行代碼 string [] fileEntries = Directory.GetDirectories(「c:/ Gameservers」);您的本地機器或遠程服務器機器上的 .. ?? – MethodMan 2012-08-02 21:07:54

+0

爲了明顯地避免這種情況發生,您是否有權寫入該目錄?嘗試而不是寫入C:\ temp \ backups寫入其他地方,如我的文檔。那樣有用嗎? – Sam 2012-08-02 21:08:38

+0

c:/ Gameservers在我的遠程機器上。 – 2012-08-03 12:19:37

回答

1

File.Copy(源,目的地)

你有你的參數逆轉。試試這個。

File.Copy"C:/Gameservers/" + servername + "/server/main/server.cfg", 
     "C:/temp/backups/" + servername + "/server/main"); 
Log.Data("File server.cfg copied for server " + servername); 
相關問題