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) в
System .IO.FileStream. Init(String path, FileMode mode, FileAccess
доступ, права Int32, логическое значение useRights, общий ресурс FileShare, Int32
bufferSize, параметры FileOptions, SECURITY_ATTRIBUTES secAttrs, String
msgPath, логическое значение bFromProxy, логическое значение useLongPath, Логический checkHost)

в System.IO.FileStream..ctor (строковый путь, режим FileMode, доступ FileAccess
, общий ресурс FileShare, Int32 bufferSize, параметры FileOptions, String
msgPath, Логическое значение bFromProxy, логическое значение useLongPath, логическое значение checkHost)

в System.IO.StreamReader..ctor (путь к строке, кодирование кодировки,
логическое значение обнаруженияEncodingFromByteOrderMarks, Int32 bufferSize, логическое значение
checkHost) в System.IO.StreamReader..ctor(путь к строке, кодировка Encoding
) в System.IO.File.InternalReadAllLines(путь к строке,
кодировка кодировки) в System.IO.File.ReadAllLines(путь к строке )


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


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


Все имена файлов имеют один и тот же формат [аккаунт]-[номер заказа].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#»