Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Пустая строка в функции Environment.GetFolderPath() C# (http://forum.oszone.net/showthread.php?t=277300)

LilLoco 07-02-2014 09:46 2304600

Пустая строка в функции Environment.GetFolderPath() C#
 
Добрый день!

Ситуация такая: при вызове функции Environment.GetFolderPath() для получения пути к папке Temp или Мои документы возвращается пустая строка. Происходит это, по всей вероятности, из-за того, что в пути присутствуют русские символы (папка Пользователи). Как обойти это?

Спасибо!

P.S. IDE - SharpDevelope

lxa85 07-02-2014 11:23 2304674

Цитата:

Цитата LilLoco
Как обойти это? »

Заключить в кавычки? (Подсунуть строку cd C:\User\ ... \Temp из командной строки)
Посмотреть, в какой кодировке идет работа?
К сожалению сейчас проверить не на чем.

LilLoco 07-02-2014 13:21 2304750

Цитата:

Цитата lxa85
(Подсунуть строку cd C:\User\ ... \Temp из командной строки »

Не совсем понятно, что имеется ввиду.

Цитата:

Цитата lxa85
Заключить в кавычки? »

Нечего заключать :) Функция - без параметров, при вызове она возвращает пустую строку.

User001 07-02-2014 13:45 2304763

Цитата:

Цитата LilLoco
Происходит это, по всей вероятности, из-за того, что в пути присутствуют русские символы »

Если вам не критично, можете переменные окружения поменять на англоязычные папки, чтобы проверить (пример).

lxa85 07-02-2014 14:30 2304790

LilLoco, А может она и должна отдавать пустую строку?
Ей кстати не передан никакой параметр.
Документация Environment::GetFolderPath - метод (Environment::SpecialFolder)
Получает путь к особой системной папке, указанной в заданном перечислении.
Цитата:

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
*/

Перечисление
В перечислении я не нашел папку Temp. Возможно ее надо где-то дополнительно указывать в системе. Пока не знаю.

Пусть отдельным сообщением.
Добавление своей папки как SpecialFolder.
Google : Sams Teach Yourself Visual Studio .NET 2003 in 21 DaysСсылка на кусок кода. Что он делает я не вчитывался. Вроде похоже.
Set Environment.SpecialFolder.LocalApplicationData using C# Предупреждение:
Цитата:

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.

LilLoco 07-02-2014 15:22 2304846

Цитата:

Цитата lxa85
Ей кстати не передан никакой параметр »

В коде, я конечно же его указывал. В противном случае не компилировалось бы.


Цитата:

Цитата lxa85
Папка физически не существует, если она не была создана операционной системой, была удалена или является виртуальным каталогом, таким как "Мой компьютер", которому не сопоставлен физический путь. »

Папка существует. Пытаюсь получить путь к моим документам.
К системной папке путь возвращается.
Исходя из этого я и подумал, что проблема в русских символах. Т.к. в пути к моим документам есть директория Пользователи.

Проблема, видимо, в среде SharpDevelove. Через MS Visual Studio 2010 Express все отлично работает.

Спасибо за ссылки, будет интересно изучить.

Iska 07-02-2014 17:24 2304930

Мне только одно интересно — почему не пользуются рекомендованные CSIDL (Windows) или новое Known Folders (Windows)?

LilLoco 10-02-2014 11:28 2306429

Цитата:

Цитата Iska
почему не пользуются рекомендованные CSIDL (Windows) или новое Known Folders (Windows)? »

А вот это у меня напрочь вылетело из головы. Спасибо за напоминание.


Время: 01:31.

Время: 01:31.
© OSzone.net 2001-