FileStream было предложено открыть устройство, которое не было файломC#

Место общения программистов C#
Ответить
Anonymous
 FileStream было предложено открыть устройство, которое не было файлом

Сообщение Anonymous »

Я отслеживаю в папке FTP заказы, которые затем считываю в массив строк для дальнейшей обработки перед удалением файла.

В целом все работает, но иногда я получаю следующее исключение:


FileStream было предложено открыть устройство, которое не является файлом. Для поддержки
таких устройств, как «com1:» или «lpt1:», вызовите CreateFile, а затем используйте конструкторы
FileStream, которые принимают дескриптор ОС в качестве IntPtr.
Stacktrace — в Microsoft.Win32.Win32Native.SafeCreateFile(String
lpFileName, Int32 dwDesiredAccess, FileShare dwShareMode,
SECURITY_ATTRIBUTES securityAttrs, FileMode dwCreationDisposition,
Int32 dwFlagsAndAttributes, IntPtr hTemplateFile) at
System.IO.FileStream.Init(String path, FileMode mode, FileAccess
доступ, права Int32, логическое значение useRights, Общий ресурс FileShare, Int32
ufferSize, параметры FileOptions, SECURITY_ATTRIBUTES secAttrs, String
msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)

в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess
доступ, FileShare доля, Int32ufferSize, параметры FileOptions, String
msgPath, логическое значение bFromProxy, логическое значение useLongPath, логическое значение checkHost)

в System.IO.StreamReader..ctor (путь к строке, кодировка кодировки,
логическое значение defineEncodingFromByteOrderMarks, Int32ufferSize, логическое значение
checkHost) в System.IO.StreamReader..ctor(String path, Encoding
кодировка) в System.IO.File.InternalReadAllLines(String path,
Кодировка кодировки) в System.IO.File.ReadAllLines(String path)


Однако, глядя на имя файла и путь, я не ожидал, что выдаст такую ошибку (например, com1.txt)


\\xxx.xxx.xxx.xxx\mbftp\4392-24979.ORD


Все имена файлов имеют один и тот же формат [account]-[orderno].ORD, номера учетных записей всегда состоят из 4 цифр.

Вот код, который выдает ошибку:

Код: Выделить всё

try
{
if (Directory.Exists(GetElementValue("FTPOrderFolder")))
{
if (File.Exists(fullOrderFilename))
{
if (File.GetLastAccessTime(fullOrderFilename) < DateTime.Now.AddSeconds(-2))
{
order = File.ReadAllLines(fullOrderFilename);
if (order.Length > 0)
{
File.Delete(fullOrderFilename);
NLogHelper.Debug(this, $"Deleted order file : {fullOrderFilename}");

return order;
}
}
}
}
}
catch (Exception ex)
{
NLogHelper.HandledException(this, ex);
}
Я не могу понять, что это не постоянная ошибка. Я получаю доступ к файлу только через 2 секунды после последнего доступа к нему, поэтому почти уверен, что это не блокировка. Кажется, это отображается в 30% обрабатываемых файлов заказов, причем 70% работают без ошибок.

Подробнее здесь: https://stackoverflow.com/questions/493 ... not-a-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»