Показать полную графическую версию : [решено] Пустая строка в функции Environment.GetFolderPath() C#
Добрый день!
Ситуация такая: при вызове функции Environment.GetFolderPath() для получения пути к папке Temp или Мои документы возвращается пустая строка. Происходит это, по всей вероятности, из-за того, что в пути присутствуют русские символы (папка Пользователи). Как обойти это?
Спасибо!
P.S. IDE - SharpDevelope
Как обойти это? »
Заключить в кавычки? (Подсунуть строку cd C:\User\ ... \Temp из командной строки)
Посмотреть, в какой кодировке идет работа?
К сожалению сейчас проверить не на чем.
(Подсунуть строку cd C:\User\ ... \Temp из командной строки »
Не совсем понятно, что имеется ввиду.
Заключить в кавычки? »
Нечего заключать :) Функция - без параметров, при вызове она возвращает пустую строку.
Происходит это, по всей вероятности, из-за того, что в пути присутствуют русские символы »
Если вам не критично, можете переменные окружения поменять на англоязычные папки, чтобы проверить (пример (http://answers.microsoft.com/en-us/windows/forum/windows_7-files/change-location-of-temp-files-folder-to-another/19f13330-dde1-404c-aa27-a76c0b450818)).
LilLoco, А может она и должна отдавать пустую строку?
Ей кстати не передан никакой параметр.
Документация Environment::GetFolderPath - метод (Environment::SpecialFolder) (http://msdn.microsoft.com/ru-ru/library/vstudio/14tx8hby(v=vs.100).aspx)
Получает путь к особой системной папке, указанной в заданном перечислении.
public static string GetFolderPath(
Environment..::..SpecialFolder folder
)
Возвращаемое значение
Тип: System.String
Путь к указанной особой системной папке, если эта папка физически существует на компьютере; в противном случае — пустая строка ("").
Папка физически не существует, если она не была создана операционной системой, была удалена или является виртуальным каталогом, таким как "Мой компьютер", которому не сопоставлен физический путь.
Пример:
// Sample for the Environment.GetFolderPath method
using System;
class Sample
{
public static void Main()
{
Console.WriteLine();
Console.WriteLine("GetFolderPath: {0}",
Environment.GetFolderPath(Environment.SpecialFolder.System));
}
}
/*
This example produces the following results:
GetFolderPath: C:\WINNT\System32
*/
Перечисление (http://msdn.microsoft.com/ru-ru/library/vstudio/system.environment.specialfolder(v=vs.100).aspx?cs-save-lang=1&cs-
lang=csharp#code-snippet-1)
В перечислении я не нашел папку Temp. Возможно ее надо где-то дополнительно указывать в системе. Пока не знаю.
Пусть отдельным сообщением.
Добавление своей папки как SpecialFolder.
Google : Sams Teach Yourself Visual Studio .NET 2003 in 21 Days (http://books.google.ru/books?id=ewvUaJ5XXtoC&pg=PA272&lpg=PA272&dq=add+SpecialFolder+to+myself&source=bl&ots=Yg140uNnZS&sig=Zj4nEBNmlfBFV_HIh_v_q_uHVfA&hl=ru&sa=X&ei=-rb0Uq6OH6_n4QT92oGIAw&ved=0CCQQ6AEwAA#v=onepage&q=add%20SpecialFolder%20to%20myself&f=false)Ссылка на кусок кода. Что он делает я не вчитывался. Вроде похоже.
Set Environment.SpecialFolder.LocalApplicationData using C# (http://stackoverflow.com/questions/1352307/set-environment-specialfolder-localapplicationdata-using-c-sharp) Предупреждение:
Please don't do this.
These folder paths don't belong to your application, and changing them in this manner will not work for a domain user who has a folder redirection policy.
Ей кстати не передан никакой параметр »
В коде, я конечно же его указывал. В противном случае не компилировалось бы.
Папка физически не существует, если она не была создана операционной системой, была удалена или является виртуальным каталогом, таким как "Мой компьютер", которому не сопоставлен физический путь. »
Папка существует. Пытаюсь получить путь к моим документам.
К системной папке путь возвращается.
Исходя из этого я и подумал, что проблема в русских символах. Т.к. в пути к моим документам есть директория Пользователи.
Проблема, видимо, в среде SharpDevelove. Через MS Visual Studio 2010 Express все отлично работает.
Спасибо за ссылки, будет интересно изучить.
Мне только одно интересно — почему не пользуются рекомендованные CSIDL (Windows) (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762494(v=vs.85).aspx) или новое Known Folders (Windows) (http://msdn.microsoft.com/en-us/library/windows/desktop/bb776911(v=vs.85).aspx)?
почему не пользуются рекомендованные CSIDL (Windows) или новое Known Folders (Windows)? »
А вот это у меня напрочь вылетело из головы. Спасибо за напоминание.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.