locked
Замечено, что API ввода-вывода обращаются с пробелами в путях весьма интересным образом. Есть ли тому причина и закономерность? RRS feed

  • Общие обсуждения

  • Некоторые пробельные символы обрезаются в конце, в начале, или в произвольном месте строки, где присутствие пробела лишено смысла. Причина заключается в том, что пробельные символы в самом начале полного пути никогда не являются действительными, равно как и в конце, а также в некоторых других ситуациях. Чтобы сделать API более работоспособным, в подобных случаях они просто обрезаются (удаляются).

     

    Обрезаются следующие символы:

    • (char) 0x9, (char) 0xA, (char) 0xB, (char) 0xC, (char) 0xD, (char) 0x20, (char) 0xA0, (char) 0x2000, (char) 0x2001, ( char) 0x2002, (char) 0x2003, (char) 0x2004, (char) 0x2005, (char) 0x2006, (char) 0x2007, (char) 0x2008, (char) 0x2009, (char) 0x200A, (char) 0x200B, (char) 0x3000, (char) 0xFEFF

    Данный код иллюстрирует это поведение, показывая, что поиск пути, такого как С:\Windows\System32, будет успешен. Правила таковы:

    • Пробельные символы в начале заданного пути будут обрезаны.
    • Пробельные символы в конце заданного пути будут обрезаны.
    • Пробельные символы после двоеточия, но до символа разделителя пути будут обрезаны.
    • Пробельные символы в конце имени файла или каталога будут обрезаны.

    Примечание. Пробельные символы допустимы в начале имени файла или каталога.

    [C#]
    using System;
    using System.IO;

    class Test {
      public static void Main() {
        Console.WriteLine( Directory.Exists(@"C: \Windows\system32") );     // prints True
        Console.WriteLine( Directory.Exists(@" C:\Windows\system32") );    // prints True
        Console.WriteLine( Directory.Exists( @"C: \Windows\system32") );    // prints True
        Console.WriteLine( Directory.Exists(@"C:\ Windows\system32") );    // prints False
        Console.WriteLine( Directory.Exists(@"C:\Windows \system32") );    // prints True
        Console.WriteLine( Directory.Exists(@"C:\Windows\ system32") );    // prints False
        Console.WriteLine( Directory.Exists(@"C:\Windows\system32 ") ) ;    // prints True
      }
    }


    Для связи [Mail]
    • Перемещено Tagore Bandlamudi 3 октября 2010 г. 0:58 MSDN Forums consolidation (От:Форум по .NET Framework)
    18 февраля 2010 г. 12:26
    Модератор