Click here to Skip to main content
15,891,473 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have a code for transferring files using winscp, I want to log all files that was transferred. The problem is, when the hierarchy gets deeper(folders/files under subfolders). The logs prints multiple times) Example below:

I want to transfer "1.1.1.txt" to the remote server in folder "New Folder1.1",
the logs that will be printed is below:

2015-03-24 17:49:34,742 Copy of: d:\jk\new folder1\new folder1.1\1.1.1.txt To: /files/df/jk/New folder1/New folder1.1 :  Successful.

2015-03-24 17:49:34,742 Copy of: d:\jk\new folder1\new folder1.1\1.1.1.txt To: /files/df/jk/New folder1 : Successful.


I'm thinking if maybe because of the transfereventargs.(I'm not sure)
Any help would be greatly appreciated. :)


The code for transferring the files.

public string TransferFile(string localFileToBebackedUp, string targetDir)
 {
     string displayResult = "";
     session.Timeout = session.Timeout.Add(TimeSpan.FromMinutes(30));
     try
     {
             TransferOptions transferOptions = new TransferOptions();
             transferOptions.TransferMode = WinSCP.TransferMode.Binary;
             transferOptions.FilePermissions = null;
             TransferOperationResult transferResult;
                 transferResult = session.PutFiles(@localFileToBebackedUp, targetDir, false, transferOptions);
                 transferResult.Check();
                 foreach (TransferEventArgs transfer in transferResult.Transfers )
                 {
                     logService.Info("Copy of: " + transfer.FileName + " To: " + targetDir + ":  Successful.");
                 }
             return displayResult;
     }
     catch (Exception ex)
     {
         ErrorType type = errorHandler.GetErrorType(ex.Message);
         logger.LogFailed(type, localFileToBebackedUp, targetDir);
         UpdateFileTransferStatus(type);
         return null;
     }
 }





And because I am using threading, here's the code:
public void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
 {
     int i = 0;
     StringBuilder builder = new StringBuilder();
     foreach (string filesToBackUp in localFileDirectories.Keys)
     {
         string[] parents = localFileDirectories[filesToBackUp].Split('/');
         string newTarget = targetDirectory;
         foreach (string p in parents)
         {
             if (transferBackgroundWorker.CancellationPending)
             {
                 e.Cancel = true;
                 return;
             }
             newTarget = newTarget + "/" + p;
             try
             {
                 if (p != "" && !session.FileExists(newTarget))
                 {
                     CreateNewFolder(newTarget);
                 }
             }
             catch (Exception ex)
             {
                 ErrorType type = errorHandler.GetErrorType(ex.Message);
                 logger.LogFailed(type, filesToBackUp, newTarget);
                 UpdateFileTransferStatus(type);
             }
         }
         string result = TransferFile(filesToBackUp, newTarget);
         builder.Append(result);
         i++;
         transferBackgroundWorker.ReportProgress(i);
         e.Result = 500;
     }
 }
Posted
Updated 24-Mar-15 0:38am
v3

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900