Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2010, 03:20   #1
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию GetWinDir - NONE

Доброго времени суток Такой вопрос. Что вернет данная функция, если путь в ОС не будет найден, или его вообще не существует (вроде может быть такое, если я не ошибаюсь) ?

Код:
function GetWinDir: string;
var
  Dir: array [0..MAX_PATH] of Char;
begin
  GetWindowsDirectory(Dir, MAX_PATH);
  Result := StrPas(Dir);
end;
RIO вне форума Ответить с цитированием
Старый 20.09.2010, 03:39   #2
Alexei91
Заблокирован
Форумчанин
 
Аватар для Alexei91
 
Регистрация: 30.12.2009
Сообщений: 544
Сообщение

Если я не ошибаюсь GetWinDir вернет значение в практически любом случае,т.к. исп-ся системный путь Windows или как его там. А вот если Wine из Linux,то не знаю,наверное вернет,что-то.
В любом случае,если что не так - у Вас вылетит системное исключение.
Темы для WordPress. Русские WordPress шаблоны
Alexei91 вне форума Ответить с цитированием
Старый 20.09.2010, 03:40   #3
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Что-то я не припоминаю случаев, чтобы в Windows папки одноименной не было.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 20.09.2010, 04:33   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от RIO Посмотреть сообщение
Что вернет данная функция, если путь в ОС не будет найден, или его вообще не существует (вроде может быть такое, если я не ошибаюсь) ?
Такой путь существует всегда. Это всё равно что спрашивать, включен ли компьютер (если бы он был выключен - вы бы не смогли задать этот вопрос!).

Если бы на машине не было бы папки Windows - значит не было бы и Windows, а значит, ваша программа не смогла бы запуститься, чтобы задать этот вопрос.

И вообще, то, что вы спрашиваете "что вернёт", не проверяя на возвращаемое значение - говорит о том, что вы пишете говно-код. Судя по всему, про обработку ошибок вы вообще никогда не слышали.

И MSDN читать не забываем:
Цитата:
The Windows directory is the directory where some legacy applications store initialization and help files. New applications should not store files in the Windows directory; instead, they should store system-wide data in the application's installation directory, and user-specific data in the user's profile.

If the user is running a shared version of the system, the Windows directory is guaranteed to be private for each user.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 20.09.2010 в 04:40.
GunSmoker вне форума Ответить с цитированием
Старый 20.09.2010, 08:30   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
If the function fails, the return value is zero. To get extended error information, call GetLastError.
тоесть:
Код:
function GetWinDir: string;
var
  Dir: array [0..MAX_PATH] of Char;
begin
  if GetWindowsDirectory(Dir, MAX_PATH) then  Result := StrPas(Dir)
  else RaiseLastWin32Error {Что позволит увидеть ошибку}
end;
Цитата:
GunSmoker
Ну ты бы тогда уже объяснил бы человеку почему микрососовцы всетки прикрутили к этой функции возврат ошибки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2010, 08:42   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Виталий, только
Код:
function GetWinDir: string;
var
  Dir: array [0..MAX_PATH] of Char;
begin
  if GetWindowsDirectory(Dir, MAX_PATH)<>0 then  Result := StrPas(Dir)
  else RaiseLastWin32Error {Что позволит увидеть ошибку}
end;
в Делфи нет автопривидения к boolean как в С
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.09.2010, 10:11   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а ну да.
Я просто подумал что ее результат LongBool.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2010, 10:30   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вообще я обычно всегда делал так:
Код:
function GetWinDir:string;
begin
 SetLength(Result,MAX_PATH);
 SetLength(Result,GetWindowsDirectory(@Result[1],MAX_PATH));
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.09.2010, 15:25   #9
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Спасибо оргномное всем, очень помогли, теперь я спокойно смогу обработать ошибки
RIO вне форума Ответить с цитированием
Старый 20.09.2010, 21:50   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну ты бы тогда уже объяснил бы человеку почему микрососовцы всетки прикрутили к этой функции возврат ошибки.
В документации написано. Пусть учатся читать.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц