OberonCore https://forum.oberoncore.ru/ |
|
B2: HostFiles.FileList в серверной конфигурации (/use) https://forum.oberoncore.ru/viewtopic.php?f=116&t=1832 |
Страница 1 из 1 |
Автор: | Евгений Темиргалеев [ Пятница, 11 Сентябрь, 2009 11:29 ] |
Заголовок сообщения: | B2: HostFiles.FileList в серверной конфигурации (/use) |
См. также: viewtopic.php?f=16&t=280 Построение списка файлов для относительного пути A (как реализовано в HostFiles): - строится список файлов из А относительно вторичного каталога (X) - этот список дополняется файлами из А относительно первичного каталога (Y), если X не найден или список файлов X получен без ошибок. - общий результат поиска приравнивается к результатам поиска в Y. По идее, можно иметь не пустой список файлов и loc.res # 0, говорящий, что этот список, возможно, не полон. Тогда надо: 1) искать файлы в Y не зависимо от результатов поиска в X 2) более корректно выставлять общий результат: если только один из каталогов не существует, то результат выставляется по поиску в существующем. Как выставляется результат, если в обоих каталогах при поиске возникли ошибки (но что-то нашлось), уже не так важно, наверное. Касательно выделенных граблей --- наступаю второй раз. Первый был давно и решился закомментированием ASSERT(loc.res = 0, 100). Второй, сейчас, был без ASSERT --- выдавал сообщение об ошибке. Полдня убил, чтобы понять: почему при полном пути все ок, а при относительном "location or file not found": Код: opath = "w:\work\1"
npath = "w:\work\2" type = "odc" res = 0 HostLocator's opath = w:\work\1 HostLocator's npath = w:\work\2 opath = "1" npath = "2" type = "odc" Список файлов 1 не получен: location or file not found Список файлов 2 не получен: location or file not found res = -1 HostLocator's opath = W:\work\1 HostLocator's npath = W:\work\2 |
Автор: | Евгений Темиргалеев [ Пятница, 11 Сентябрь, 2009 11:55 ] |
Заголовок сообщения: | Re: HostFiles.FileList и серверный ББ |
По выделенному, например, такое исправление: Код: PROCEDURE (d: Directory) FileList* (loc: Files.Locator): Files.FileInfo;
VAR ... --> firstRes: INTEGER; BEGIN ASSERT(loc # NIL, 20); first := NIL; last :=NIL; WITH loc: Locator DO Append(loc.path, wildcard, wildcard, loc.maxLen, s); find := WinApi.FindFirstFileW(s, fd); IF find # invalid THEN ... ELSE res := WinApi.GetLastError() END; IF res = noMoreFilesErr THEN res := ok END; --> firstRes := res; (* check startup directory *) IF (loc.rootLen > 0) & ((res = ok) OR (res = fileNotFoundErr) OR (res = pathNotFoundErr)) THEN GetShadowDir(loc, s); ... END; --> IF (res = fileNotFoundErr) OR (res = pathNotFoundErr) THEN res := firstRes END; loc.res := Error(res) ELSE loc.res := invalidName END; RETURN first END FileList; |
Автор: | Иван Горячев [ Понедельник, 14 Сентябрь, 2009 04:28 ] |
Заголовок сообщения: | Re: HostFiles.FileList и серверный ББ |
Так это, в 1.6 Comm разве такого исправления не лежит? По крайней мере я это исправление года два назад делал |
Автор: | Евгений Темиргалеев [ Понедельник, 14 Сентябрь, 2009 09:37 ] |
Заголовок сообщения: | Re: HostFiles.FileList и серверный ББ |
И правда --- есть Код: PROCEDURE MaskFileList (loc : Files.Locator; IN mask : ARRAY OF CHAR) : Files.FileInfo;
... res1 : INTEGER; (* 28.09.2006 ING *) ... res1 := res; (* 28.09.2006 ING *) ... IF res1 = ok THEN res := ok END; (* 28.09.2006 ING *) END MaskFileList; |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |