Может кто-нибудь сказать мне, как избавиться от ошибкиФайл используется другой ошибки процесса
Процесс не может получить доступ к файлу, так как он используется другим процессом
Вот мой код
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
session.Open(sessionOptions);
//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))
{
System.IO.File.Delete(FilePath);
}
//the parameter list is: remote Path, Local Path with filename
TransferOperationResult transferOperationResult = session.GetFiles(Sftp_RemotePath, FilePath , false, transferOptions);
//Throw on any error
transferOperationResult.Check();
Debug.WriteLine("Downloaded fresh sales data file!");
}
}
Я использую MVC и имею два контроллера, которые имеют доступ к этому классу. При запуске контроллеров по одному, то он работает нормально, но когда я бегу оба контроллера вместе, то я получаю эту ошибку в одном из контроллера:
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}
Я получаю эту ошибку после этой строки
transferOperationResult.Check();
Если изменить имя файла здесь
TransferOperationResult transferOperationResult = session.GetFiles(Sftp_RemotePath, FilePath+Path.GetRandomFileName() , false, transferOptions);
Он отлично работает, и сохраните файл с произвольным именем файла, но я хочу передать мой FileName. Как это решить?
Вам необходимо убедиться, что у вас нет открытого файла в коде или в каком-либо другом приложении. В Google для этой ошибки появится целый ряд примеров. – Xcelled194
работает отлично для одного запроса, но когда я удаляю оба контроллера вместе, я получаю эту ошибку, и это строка TransferOperationResult transferOperationResult = session.GetFiles (Sftp_RemotePath, FilePath, false, transferOptions); когда я изменяю FilePath на FilePath + Path.GetRandomFileName(), он работает – user3754674
Да, потому что один контроллер уже открыл и заблокировал файл, а другой * пытается * открыть его в одно и то же время, что приведет к этому исключению. По сути, вы пытаетесь открыть файл дважды. Ваше GetRandomFileName работает, потому что каждый контроллер получает другой результат от этого метода, и поэтому каждый обращается к другому файлу. – Xcelled194