Synchronize vs GetFiles C#

Advertisement

Andrezinn
Joined:
Posts:
4

Synchronize vs GetFiles C#

Here I am, after try alot of different thinks, asking you guys if someone could please help me.

Today I have this script:
option batch on
option confirm off
open XXXX:YYYY@ZZZ.WWW.KKK.QQQ:7001
cd "ROOT"
synchronize local "J:\FILES" "/ROOT/Jan"
And I am trying to do this Syncronize code, using C# as follow:
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
   Protocol = Protocol.Sftp,
   HostName = Ip,
   UserName = User,
   Password = Pwd,
   PortNumber = Convert.ToInt32(Port),
   SshHostKey = "ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
};
 
using (Session session = new Session())
{
   //Desabilita o check de versões
   session.DisableVersionCheck = true;
   // Will continuously report progress of synchronization
   session.FileTransferred += FileTransferred;
   // Connect
   session.Open(sessionOptions);
 
   RemoteDirectoryInfo directory = session.ListDirectory(cEntrada[0]);
   foreach (RemoteFileInfo fileInfo in directory.Files)
   {
       listBox1.Items.Add("Name: " + fileInfo.Name + " length:" + fileInfo.Length + " Permissions:" + fileInfo.FilePermissions + " Wrote in " + fileInfo.LastWriteTime);
 
 
// ****************************************************
// UNTIL HERE, IT IS OK!
// ****************************************************
 
//:arrow: It suppose to work as we have in WinScp example:
   SynchronizationResult synchronizationResult;
   synchronizationResult = session.SynchronizeDirectories(SynchronizationMode.Local, cEntrada[0], cSaida[0], false);
   synchronizationResult.Check();
 
// But Just didnt bring me anything.... :?:
// In another hand, If I try
 
   TransferOperationResult transferResult;
   transferResult = session.GetFiles(cEntrada[0], cSaida[0], false);
   transferResult.Check();
It start to download my files... but I have more than 100 files day, and I really don't want to download all of them everytime.

Reply with quote

Advertisement

martin
Site Admin
martin avatar
Joined:
Posts:
41,454
Location:
Prague, Czechia

Re: Syncronize Vs GetFiles C#

Should be:
session.SynchronizeDirectories(SynchronizationMode.Local, cSaida[0], cEntrada[0], false);

Reply with quote

Andrezinn
Joined:
Posts:
4

Re: Syncronize Vs GetFiles C#

@martin, Thank you for your help, but nothing happens... it still pass thru this line as if I don't have it.

I also have my:
private static void FileTransferred(object sender, TransferEventArgs e)
And once again, my code never enter on it

Reply with quote

Advertisement

Andrezinn
Joined:
Posts:
4

[SOLVED] Syncronize Vs GetFiles C#

prikryl,
To be honest, It is working kind well. I just don't know how can I (if I can) watch my download % for each file, and\or my % of files download.

In this second case I tried:
int contador = 0;
label1.Text = "Listing";
foreach (RemoteFileInfo fileInfo in directory.Files)
{
    contador++;
}
progressBar1.Maximum = contador;
and in my FileTransferred Method
progressBar1.Value++;
But it just work for the first path (Of course, I couldn't retrieve my subfolders... since I start my session.SynchronizeDirectories, it freeze my code)

Could you help me with it?

Reply with quote

martin
Site Admin
martin avatar
Joined:
Posts:
41,454
Location:
Prague, Czechia

Re: [SOLVED] Syncronize Vs GetFiles C#

With synchronization there's no way to calculate progress. WinSCP does not announce how many files it's going to synchronize.

Edit 2021: Now you can use Session.CompareDirectories and iterate the returned differences, calling ComparisonDifference.Resolve for each. That way you can estimate the percentage done.
https://winscp.net/eng/docs/library_session_comparedirectories

Reply with quote

Advertisement

You can post new topics in this forum