当我使用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;
}
}
错误代码: utf8文件名:\?\ C:\ Users \ someFile.txt osErrorInfo:系统找不到指定的文件。 localWindowsFilePath:C:\ Users \ someFile.txt 无法打开文件数据源。 无法打开要上传的本地文件。 --uploadFileByName 失败。
我不希望在检查文件是否可用后看到此错误,因为只有isAvailable = true才能尝试发送文件。我确实在论坛上检查了此类错误,并用谷歌搜索,但无法确定\?\是什么意思。