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;
}
}