Double Commander

Файловый менеджер

Модератор: Модераторы

mpyat2
незнакомец
Сообщения: 5
Зарегистрирован: 15.01.2008 23:15:02
Откуда: Киев

Сообщение mpyat2 »

Об ошибках сюда можно?
В модуле ufileop.pas, процедура LoadFilesbyDir строку 98

Код: Выделить всё

if sr.Name='' then COntinue;

лучше раскомментировать -- у меня на Ubuntu 7.10 (Lazarus 0.9.25) при получении списка некоторых директорий (напр. мой home) FindFirst возвращает файл с пустым именем (откуда? может гуру знают?). В результате в строке 110

Код: Выделить всё

fr.bSysFile := (sr.Name[1] = '.') and (sr.Name <> '..');

DoubleCmd вылетает (обращение к несуществуюшему sr.Name[1]).
Строки относительно сегодняшнего SVN версии 156
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

mpyat2 это костылик не стоит этого добавлять.

проблема или в LCL или в твоей системе.
преверь на других командерах, а также свой примерчик сооруди с файндом.

у меня в венде напричер часто на СД жалуется, даже где-то выше писал об этом, но это проблемы моей системы например она еще проявляется на антивируснике ..
mpyat2
незнакомец
Сообщения: 5
Зарегистрирован: 15.01.2008 23:15:02
Откуда: Киев

Сообщение mpyat2 »

Ok, но зачем тогда этот костылик присутствует [почти] везде, где FindFirst встречается в исходных кодах Lazarus?
См. например, lazarus\ide\buildmanager.pas метод

Код: Выделить всё

function TBuildManager.DeleteAmbiguousFiles(const Filename: string
  ): TModalResult;
....
    if SysUtils.FindFirst(ADirectory+GetAllFilesMask,faAnyFile,FileInfo)=0 then
    begin
      ShortFilename:=ExtractFileName(Filename);
      IsPascalUnit:=FilenameIsPascalUnit(ShortFilename);
      UnitName:=ExtractFilenameOnly(ShortFilename);
      repeat
        if (FileInfo.Name='.') or (FileInfo.Name='..')
        or (FileInfo.Name='')
        or ((FileInfo.Attr and faDirectory)<>0) then continue;
....


и другие (checkcompileropts.pas, codebrowser.pas ...).

Может в этом есть некий скрытый смысл? :-)
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

тогда скрытый наверно есть =)
хотя странно это имхо =/

Alexx2000 добавишь ?
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

Attid писал(а):Alexx2000 добавишь ?

В модуль ufileop.pas добавил.

mpyat2, копирование/ удаление нормально работают? Тут на форуме на sf.net, radek25 пишет что у него в Ubuntu 7.10 виснет.
mpyat2
незнакомец
Сообщения: 5
Зарегистрирован: 15.01.2008 23:15:02
Откуда: Киев

Сообщение mpyat2 »

Попробую сегодня вечером (Ubuntu только дома)
mpyat2
незнакомец
Сообщения: 5
Зарегистрирован: 15.01.2008 23:15:02
Откуда: Киев

Сообщение mpyat2 »

При удалении файлов (UBUNTU 7.10) ПОЧТИ всегда зависает (причем так жестко, что система перестает реагировать, только мышь двигается. Ctrl-Alt-F1 удалось переключиться на текстовую консоль, но при переключении обратно все замерзло ввобще).
Похоже, виснет на Resume потока, который удаляет файлы. Но на 100% не уверен (продебагить пока не удалось, все нафиг виснет).

Копирование иногда работает, иногда виснет.

Более мелкий баг: похоже FindFirst/FindNext реализован не очень корректно: у меня встречаются файлы с двоеточием в имени (НЕ Я ИХ ДЕЛАЛ!). MC показывает их корректно, DoubleCmd откусывает часть имени или не показывает их вообще. При копировании каталогов с такими файлами вылетает.
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Более мелкий баг: похоже FindFirst/FindNext реализован не очень корректно: у меня встречаются файлы с двоеточием в имени (НЕ Я ИХ ДЕЛАЛ!). MC показывает их корректно, DoubleCmd откусывает часть имени или не показывает их вообще. При копировании каталогов с такими файлами вылетает.

Таки да. Создать файл с двоеточием в имени (в DC) не удалось.
Файл с именем #$.txt создался, но копирование, перемещение
вызвают Access Violation. Открытие на редактирование во внутреннем редакторе и удаление просто не срабатывают.
Добавлено
Хм, файл с двоеточием (описанный выше) (new:#$.txt) создался, но отображался как #$.txt. Случайно обнаружил просмотрев темповую папку с помощью mc. После перезапуска DC видит этот файл как папку. Странно...

Во первых не знаю как его вывести (может
быть использовать Hint). Во вторых где именно выводить данное
окно?

Предлагаю такой вариант:
Лог. Хорошо выполненный интерфейсно и практически.
И минипанельку лога показывать под функциональными кнопками ( а лучше вместо них, их все равно никто не использует). А кому надо больше функций лога - вызовет соответсвующий диалог.
Подобная реализация (минипанель лога) мне встретилась у emelfm, или как он там пишется. Очень (!) удобно.
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Нашел таки этот противный баг с отображением ".." в корневой папке (/):
ufilepanel.pas строка 169

Код: Выделить всё

 if (not gShowSystemFiles) and bSysFile then Continue;
       fRefList.Add(pfri);

Добавляем еще одно условие:

Код: Выделить всё

if (not gShowSystemFiles) and bSysFile then Continue;
if ((pfri^.sPath='') and (pfri^.sName='..') and (ActiveDir='/')) then  Continue;
       fRefList.Add(pfri);
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Что-то сломали в чтении настроек.
Указываем шрифт, ок, перезапускаем ДС - указан default.
Более старые версии читают нормально (свн от 13 числа читает).
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

А не, с чтением все в норме. Проблема в записи. То ли куда-то не туда пишет, толи не пишет вообще. Вручную добавил
FontName=-xos4-terminus-medium-r-normal-*-*-160-*-*-c-*-iso10646-1
в ~/.config/doublecmd/doublecmd.ini и все стало нормуль.
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Такое предложение: ограничить отображаемый путь (слева от комстроки) иначе при входе "глубоко" в фс кострока теряется.
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

B4rr4cuda писал(а):Подобная реализация (минипанель лога) мне встретилась у emelfm, или как он там пишется. Очень (!) удобно.

Хорошая идея, мне нравится.

Добавляем еще одно условие:

Код: Выделить всё

if (not gShowSystemFiles) and bSysFile then Continue;
if ((pfri^.sPath='') and (pfri^.sName='..') and (ActiveDir='/')) then  Continue;
       fRefList.Add(pfri);

Добавил

А не, с чтением все в норме. Проблема в записи. То ли куда-то не туда пишет, толи не пишет вообще.

Хранение настроек сейчас перерабатываю, поэтому могут быть ошибки в работе

B4rr4cuda писал(а):Такое предложение: ограничить отображаемый путь (слева от комстроки) иначе при входе "глубоко" в фс кострока теряется.

Надо добавить соответствующую опцию
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

mpyat2 писал(а):При удалении файлов (UBUNTU 7.10) ПОЧТИ всегда зависает (причем так жестко, что система перестает реагировать, только мышь двигается. Ctrl-Alt-F1 удалось переключиться на текстовую консоль, но при переключении обратно все замерзло ввобще).

Похоже, виснет на Resume потока, который удаляет файлы. Но на 100% не уверен (продебагить пока не удалось, все нафиг виснет).

Копирование иногда работает, иногда виснет.

Кстати, мелькнула мысля, может эта проблема косвенно связана с нерабочим копированием\перемещением\удалением в DC собраным под QT?
"Что-то неладно в Датском Королевстве" С
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Нашел таки бяку...
Потоковые операции (копирование/перемещение/удаление) в DC собранном под QT начинают работать, если не использовать синхронизацию.
В частности удаление работает полностью коректно, если в модуле uDeleteThread заменить вызовы а-ля

Код: Выделить всё

Synchronize(@FFileOpDlg.UpdateDlg);

на

Код: Выделить всё

FFileOpDlg.UpdateDlg;

Это работает также под GTK и GTK2.
Точнее работает, но не совсем коректно...

У кого какие мысли?
Ответить