Мне нравится TT ProFont> tweaked< Это чисто и существует четкое различие между 1, l, и я и 0 и O.It работаю лучше всего на уровне 9 ПБ. Это не увеличивается очень хорошо.
Единственный раз, когда вам обычно приходится выполнять какую-либо особую обработку с именами файлов, в которых есть пробелы, - это когда вы передаете их во внешние инструменты или форматы. Если вы, например, создаете список аргументов для внешнего исполняемого файла, все, что вам нужно сделать, это указать путь:
string path = @"C:\TestFolder\Input\Friends - Season 6 - Gag Reel.avi";
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "program.exe";
psi.Arguments = "\"" + path + "\""; // escape the quotes
... что приведет к следующей командной строке:
program.exe "C: \ TestFolder \ Input \ Friends - Season 6 - Gag Reel.avi "
System.IO. Путь предоставляет несколько методов для управления именами файлов ...
вы используете класс FileInfo
?
он содержит (почти) все о файле, включая атрибуты и версии файлов, и вам не нужно беспокоиться о пробелах или других нежелательных символах. Пока файл существует, он хорошо работает с FileInfo.
используйте его как
FileInfo f = new FileInfo (fullPathEvenWithSpaces);
Как правило, пути к файлам, передаваемые в качестве аргументов в командной строке, требуют, чтобы путь был заключен в кавычки.
Если вы говорите о принятии путей к файлам в качестве аргумента вашей программы , проще всего потребовать от пользователей указывать пути. Таким образом, аргумент args
вашего основного метода будет содержать весь путь как одну строку.
Если вы вызываете другие программы и передаете аргументы, пути к файлам с пробелами должны быть заключены в кавычки.
Process p = new Process();
p.StartInfo.FileName = "notepad.exe";
p.StartInfo.Arguments = string.Format("\"{0}\"", filePath);
p.Start();
] Все файлы имеют короткий путь, совместимый с DOS 8.3. Единственный способ получить это имя файла - GetShortPathName. Лучшее объяснение, которое я могу найти, находится по следующему адресу:
http://www.pinvoke.net/default.aspx/kernel32.GetShortPathName
Я согласен с приведенным выше постом. Чтобы было проще, вот код, который нужно использовать. В моем мнении Хамбл, единственное хорошее имя файла - это имя файла без пробела.
Для этого в коде c# у меня есть следующее:
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern uint GetShortPathName(
[MarshalAs(UnmanagedType.LPTStr)]
string lpszLongPath,
[MarshalAs(UnmanagedType.LPTStr)]
StringBuilder lpszShortPath,
uint cchBuffer);
public static StringBuilder shortNameBuffer = new StringBuilder(256);
public static string ToShortPathName(string longName)
{
uint result = GetShortPathName(longName, shortNameBuffer, 256);
return shortNameBuffer.ToString();
}
Это добавляет к вашему классу метод, который можно использовать следующим образом:
String goodFileName = ToShortPathName(evilFileName);
NOTE: Я использую это в пользовательском интерфейсе, так что я не возражаю против того, чтобы быть нечитаемым и повторно использовать StringBuider. Если вы находитесь в многопоточной среде, убедитесь, что вытащили выделение StringBuilder внутри вашего метода.