FileStream wurde aufgefordert, ein Gerät zu öffnen, das keine Datei warC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 FileStream wurde aufgefordert, ein Gerät zu öffnen, das keine Datei war

Post by Anonymous »

Ich überwache einen FTP-Ordner auf Bestellungen, die ich dann zur weiteren Verarbeitung in ein String-Array einlese, bevor ich die Datei lösche.

Im Großen und Ganzen funktioniert es, aber gelegentlich erhalte ich die folgende Ausnahme:


FileStream wurde aufgefordert, ein Gerät zu öffnen, das keine Datei war. Rufen Sie zur Unterstützung
für Geräte wie „com1:“ oder „lpt1:“ CreateFile auf und verwenden Sie dann die
FileStream-Konstruktoren, die ein Betriebssystem-Handle als IntPtr akzeptieren.
Stacktrace – unter Microsoft.Win32.Win32Native.SafeCreateFile(String
lpFileName, Int32 dwDesiredAccess, FileShare dwShareMode,
SECURITY_ATTRIBUTES securityAttrs, FileMode dwCreationDisposition,
Int32 dwFlagsAndAttributes, IntPtr hTemplateFile) bei
System.IO.FileStream.Init(String path, FileMode mode, FileAccess
Zugriff, Int32-Rechte, Boolean useRights, FileShare-Freigabe, Int32
bufferSize, FileOptions-Optionen, SECURITY_ATTRIBUTES secAttrs, String
msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)

at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess
Zugriff, FileShare-Freigabe, Int32 bufferSize, FileOptions-Optionen, String
msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)

bei System.IO.StreamReader..ctor(String path, Codierung,
Boolean discoverEncodingFromByteOrderMarks, Int32 bufferSize, Boolean
checkHost) bei System.IO.StreamReader..ctor(String path, Codierung
) bei System.IO.File.InternalReadAllLines(String-Pfad,
Encoding-Kodierung) bei System.IO.File.ReadAllLines(String-Pfad)


Wenn ich mir jedoch den Dateinamen und den Pfad anschaue, ist es nichts, was ich erwarten würde, um einen solchen Fehler (wie com1.txt) auszulösen.


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


Alle Dateinamen haben das gleiche Format [Konto]-[Bestellnummer].ORD, Konten sind immer 4-stellige Nummern.

Hier ist der Code, der den Fehler auslöst:

Code: Select all

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);
}
Die Tatsache, dass es sich nicht um einen ständigen Fehler handelt, ist die Sache, die ich nicht herausfinden kann. Ich greife erst 2 Sekunden nach dem letzten Zugriff auf die Datei zu, bin mir also ziemlich sicher, dass es sich nicht um eine Sperre handelt. Es scheint, dass bei 30 % der verarbeiteten Bestelldateien 70 % ohne Fehler funktionieren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post