2016-11-24 13 views
0

ファイル名が "aux"のパスに書き込もうとすると、例外が発生する可能性があります。同じディレクトリ内のほかのディレクトリにある他のファイル名は完全に動作し、以前はこの種の問題を抱えていませんでした。あなたのアイデアを与えることをファイル名が "aux"のパスに書き込めません

、このテストコードを検討:

Directory.CreateDirectory ("D:\\asdf"); // OK 
File.WriteAllText ("D:\\asdf\\aux_", ""); // OK 
try { 
    File.WriteAllText ("D:\\asdf\\aux.txt", ""); // fails 
} 
catch (ArgumentException ex) { 
    Console.WriteLine (ex); 
} 
try { 
    File.WriteAllText ("D:\\asdf\\aux", ""); // fails 
} 
catch (ArgumentException ex) { 
    Console.WriteLine (ex); 
} 
Console.WriteLine (string.Join ("\n", Directory.EnumerateFiles ("D:\\asdf"))); 

を最後の行は、一つのファイルが作成されたことを出力します。

D:\asdf\aux_ 

二つの等しい例外がスローされます。

System.ArgumentException: FileStream will not open Win32 devices such as disk partitions and tape drives. Avoid use of "\\.\" in the path. 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
    at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) 
    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) 
    at System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding, Boolean checkHost) 
    at Program.Main(String[] args) in C:\...\Program.cs:line 24 

\\/に変更してもanythiは変更されませんでした(私の知る限り、Windowsでは標準ではありません)。私はaux承知している

は長い時間前に特別な意味を持っていたが、それが唯一のサブディレクトリに(または拡張子なし)ファイル名で発生考えると、それはそれに関連するを想定していないです。

+1

なぜそれには関係しませんか? https://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx <"ファイル名に次の予約名を使用しないでください:... AUX ..." – Evk

+1

厳密には接続されていたにもかかわらず複製。 AUX.TXTという名前のファイルで、AUXという名前のフォルダではありません – Steve

答えて

0

AUXはファイルの予約名です。 CON、 PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、:

は、ファイルの名前について、次の予約名を使用しないでください:それは、彼らが言うNaming Files, Paths, and NamespacesでMSDNに記載されていCOM6、COM7、COM8、COM9、 、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8、およびLPT9である。 これらの名前の直後に拡張子を付けることも避けてください。たとえば、NUL.txt は推奨されません。

関連する問題