Post a reply

Before posting, please read how to report bug or request support effectively.

Bug reports without an attached log file are usually useless.

Add an Attachment

If you do not want to add an Attachment to your Post, please leave the Fields blank.

(maximum 10 MB; please compress large files; only common media, archive, text and programming file formats are allowed)


Topic review


Owais.Ahmed wrote:

yes because it did not solve my problem and i am using winScp so better chances to fix this issue from this forum !

From WinSCP perspective, there's nothing more to suggest that what was already stated on StackOverflow.
You cannot download to the same file from two processed/threads running in parallel.
Either make the destination file name unique for each process/thread or protect against concurrent access. As per example suggested by @Piyush Parashar.

yes because it did not solve my problem and i am using winScp so better chances to fix this issue from this forum !
Owais Ahmed

Any help???

Downloading File gives an error The process cannot access th

I am using Winscp to download csv file from the SFTP server. This is my code

 if (!File.Exists(FlagFilePath))

                    Debug.WriteLine("Trying to download sales data file ");

                    SessionOptions sessionOptions = new SessionOptions
                        Protocol = Protocol.Sftp,
                        HostName = ConfigurationManager.AppSettings["SFTPDomain"],
                        UserName = ConfigurationManager.AppSettings["SFTPUser"],
                        Password = ConfigurationManager.AppSettings["SFTPPass"],
                        PortNumber = Convert.ToInt32(ConfigurationManager.AppSettings["SFTPPortNumber"]),
                        GiveUpSecurityAndAcceptAnySshHostKey = true,


                    using (Session session = new Session())

                        //Attempts to connect to your SFtp site

                        //Get SFtp File
                        TransferOptions transferOptions = new TransferOptions();
                        transferOptions.TransferMode = TransferMode.Binary; //The Transfer Mode - Automatic, Binary, or Ascii
                        transferOptions.FilePermissions = null;  //Permissions applied to remote files;
                        transferOptions.PreserveTimestamp = false;  //Set last write time of destination file
                        //to that of source file - basically change the timestamp to match destination and source files.   
                        transferOptions.ResumeSupport.State = TransferResumeSupportState.Off;
                        //SFTP File Path
                        Sftp_RemotePath = ConfigurationManager.AppSettings["SFTPFileName"].ToString();
                        //Delete File if Exist
                           if (System.IO.File.Exists(FilePath))
                        //the parameter list is: remote Path, Local Path with filename
                        TransferOperationResult transferOperationResult = session.GetFiles(Sftp_RemotePath, FilePath , false, transferOptions);
                        //Throw on any error
                        Debug.WriteLine("Downloaded fresh sales data file!");

I am using MVC so i have two controllers that are accessing this class and when i run the controller one at a time then it works fine but when i run both controllers together then i get this error in one of the controller

{WinSCP.SessionRemoteException: Can't create file 'D:\TESTING\SFTP\Data.csv'. ---> WinSCP.SessionRemoteException: System Error.

      Code: 32.
    The process cannot access the file because it is being used by another process
       --- End of inner exception stack trace ---
       at WinSCP.OperationResultBase.Check()
       at JetStarAPI.Models.SFTPClient.DownloadFile(String FilePath) in D:\TESTING\SFTP\Models\SFTPClient.cs:line 65}

I am getting this error after this line


if i change the name of the file here

  TransferOperationResult transferOperationResult = session.GetFiles(Sftp_RemotePath, FilePath+Path.GetRandomFileName() , false, transferOptions);

It works fine and save the file with random file name but i want to pass my FileName. How to solve this?