Как я могу определить причину ошибки chilkat sftp? - PullRequest
0 голосов
/ 10 июня 2019

Когда я отправляю текстовые файлы на сервер с моего клиента с помощью Chilkat sftp, я иногда получаю сообщение об ошибке, что локальный файл не может быть открыт. Ошибка говорит: osErrorInfo: Системе не удается найти указанный файл.

Я использую класс наблюдателя файлов системы C #, отслеживаю папку на предмет появления новых файлов, когда файл приходит, я загружаю его на свой сервер sftp. Сначала я подумал, что может быть блокировка файла, поэтому я добавил проверку, что файл был доступен и существует, прежде чем пытаться отправить файл, но это не предотвратило повторения этой ошибки. В ошибке говорится: utf8Filename: \? \ C: \ Users \ someFile.txt, я проверил путь для поиска \? \ в пути перед отправкой, но подумал, что это может представлять файл, который не существует, но он его не находит , После уведомления NewFileArrived я также добавил Thread.sleep на 5 секунд, чтобы убедиться, что я не пытался открыть файл, который еще не был записан в папку, которую я отслеживал. Я использую путь к папке folderBrowser.selected, чтобы получить путь к папке, которую я хочу отслеживать.

          private void BtnBrowse_Click( object sender , EventArgs e )
        {
           if ( fdb1.ShowDialog( ) == DialogResult.OK )
           {
             _dirName = fdb1.SelectedPath;
             string  folderName = Path.GetFileNameWithoutExtension( 
                     fdb1.SelectedPath ) ;
           }
        }

код Chilkat здесь: (не хотел вставлять все это) https://www.example -code.com / CSharp / sftp_uploadFileByName.asp

Вот код проверки наличия файла:

          private void CheckFileStatus(FileInfo myFile)
        {
          string path = $"{myFile.FullName}";
          using (FileStream fs = File.Open(path, FileMode.Open, 
                  System.IO.FileAccess.Write, FileShare.None))
          {
            byte[] info = new  
                    UTF8Encoding(true).GetBytes(myFile.Name);
            int byteCount = info.Count();
                if (byteCount > 0)
            {
            isAvailable = true;
            fs.Close();
            }
            else
            isAvailable = false;
          }
        }

Код ошибки: utf8Filename: \? \ C: \ Users \ someFile.txt osErrorInfo: Система не может найти указанный файл. localWindowsFilePath: C: \ Users \ someFile.txt Не удалось открыть файл источника данных. Не удалось открыть локальный загружаемый файл. --uploadFileByName Не удалось.

Я не ожидал увидеть эту ошибку после проверки доступности файла, потому что только если isAvailable = true, файл может пытаться отправить. Я проверил форум на наличие ошибок такого типа и погуглил, но не смог определить, что \? \ Означает.

...