Когда я отправляю текстовые файлы на сервер с моего клиента с помощью 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, файл может пытаться отправить. Я проверил форум на наличие ошибок такого типа и погуглил, но не смог определить, что \? \ Означает.