путь к файлу и магическое число 10

7 views
Skip to first unread message

cta...@gmail.com

unread,
Mar 16, 2010, 12:09:46 PM3/16/10
to color...@googlegroups.com
приветствую.
ниже две функции, обе работают с путем до папки/файла. Зеленым выделены непонятные строки (если сбилась раскраска, то это
строка 1 и 15 в функциях соответственно). непонятно использование : и числа 10.
если path->indexOf(':') != -1 , то это видимо путь до файла в windows, где есть буква диска. но что тогда ограничивает 10 ?
для windows возможные варианты c:\1.txt  и \\?\c:\1.txt , тут как то 10 не пахнет. другой вариант файловые потоки, но что то не думаю что их поддерживали и стоит поддерживать.  Другой вариант Mac Os classic ?  тогда опять же 10 от куда, вроде нет там минимального ограничения первой части (папки) пути.

другой момент еще - зачем поддерживать "file:/" , "file:" , если стандарт uri "file://"

bool InputSource::isRelative(const String *path){
  if (path->indexOf(':') != -1 && path->indexOf(':') < 10) return false;
  if (path->indexOf('/') == 0 || path->indexOf('\\') == 0) return false;
  return true;
};

FileInputSource::FileInputSource(const String *basePath, FileInputSource *base){
  bool prefix = true;
  if (basePath->startsWith(DString("file://"))){
    baseLocation = new SString(basePath, 7, -1);
  }else if (basePath->startsWith(DString("file:/"))){
    baseLocation = new SString(basePath, 6, -1);
  }else if (basePath->startsWith(DString("file:"))){
    baseLocation = new SString(basePath, 5, -1);
  }else{
    if (isRelative(basePath) && base != null)
      baseLocation = getAbsolutePath(base->getLocation(), basePath);
    else
      baseLocation = new SString(basePath);
    prefix = false;
  };
  if(prefix && (baseLocation->indexOf(':') == -1 || baseLocation->indexOf(':') > 10) && !baseLocation->startsWith(DString("/"))){
    StringBuffer *n_baseLocation = new StringBuffer();
    n_baseLocation->append(DString("/")).append(baseLocation);
    delete baseLocation;
    baseLocation = n_baseLocation;
  }
  stream = null;
};


-- 
С уважением,
 Ctapmex                          mailto:cta...@gmail.com

anatoly techtonik

unread,
Mar 16, 2010, 2:41:43 PM3/16/10
to colorer_ru
2010/3/16 <cta...@gmail.com>:

> приветствую.
> ниже две функции, обе работают с путем до папки/файла. Зеленым выделены
> непонятные строки (если сбилась раскраска, то это
> строка 1 и 15 в функциях соответственно). непонятно использование : и числа
> 10.
> если path->indexOf(':') != -1 , то это видимо путь до файла в windows, где
> есть буква диска. но что тогда ограничивает 10 ?

file://C:/ ?

--
anatoly t.

cta...@gmail.com

unread,
Mar 17, 2010, 12:15:57 AM3/17/10
to anatoly techtonik

> file://C:/ ?

похоже на то, но тогда проверка в FileInputSource с цифрой 10 не имеет
смысла, т.к. мы уже выдернули file:// из строки

Igor Russkih

unread,
Mar 17, 2010, 1:33:52 AM3/17/10
to color...@googlegroups.com
> file://C:/ ?

похоже на то, но тогда проверка в FileInputSource с цифрой 10 не имеет
смысла, т.к. мы уже выдернули file:// из строки


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

cta...@gmail.com

unread,
Mar 17, 2010, 1:43:46 AM3/17/10
to Igor Russkih
Привет.
баги пока не наблюдаю. есть не понятная ненужная проверка.
а мысль такая - я хочу переделать InputSource под нормальную работу с относительными путями.
т.е. link может быть следующих видов
1. link="file://c:/colorer/base/c.hrc"/ , т.е. полный путь в формате
uri до файла (не архива, именно файла)
2. link="base/c.hrc"/ , link="../base/c.hrc"/ относительный путь до
файла
3. link="jar:common.jar!base/c.hrc"/> - путь до архива и файла в
нутри него.
4. link="jar:../common.jar!base/c.hrc"/> - относительный путь до
архива файла
5. link="http://common/base/c.hrc"/> - путь до сайта. тут
если и есть относительность, то она должна подругому вычисляться

плюс проверка на isRelative применяется и для http и для файлов
одинаково, хотя протоколы разные и правила именования разные.

Igor Russkih

unread,
Mar 17, 2010, 2:02:54 AM3/17/10
to color...@googlegroups.com
Погоди.. А разве сейчас все это не работает?


 Igor


2010/3/17 <cta...@gmail.com>

cta...@gmail.com

unread,
Mar 17, 2010, 2:11:13 AM3/17/10
to Igor Russkih
с архивами точно не работают относительные пути. ну и проверка на относительные пути не совсем правильная.


Igor Russkih

unread,
Mar 17, 2010, 5:07:59 AM3/17/10
to color...@googlegroups.com
Странно что относительный путь не срабатывает... по коду вроде должен срабатывать..
Погоди, но почему тогда

    <location link="jar:types/auto.jar!types/cobolsql.hrc"/>

срабатывает?

Тоже ведь относительный путь..

 Igor


2010/3/17 <cta...@gmail.com>

cta...@gmail.com

unread,
Mar 17, 2010, 5:21:47 AM3/17/10
to Igor Russkih
вот такой путь не сработает jar:../auto.jar!types/cobolsql.hrc
применяют такой подход, когда 
1. не хотят портить файлы дистрибутива
2. нужно чтобы для определенного типа срабатывала схема B, а не схема A
3. в hrc\auto добавляют hrc файлик где указан путь наподобие
        jar:../common.jar!types/cobolsql.hrc

Igor Russkih

unread,
Mar 17, 2010, 5:55:51 AM3/17/10
to color...@googlegroups.com
Это я понял. Я из кода не пойму пока почему это не работает. Должно.

 Igor

2010/3/17 <cta...@gmail.com>
Reply all
Reply to author
Forward
0 new messages