View Issue Details

IDProjectCategoryView StatusLast Update
0000223Far Manager 1.7xSetAttrpublic2007-07-16 16:06
ReporterZuzAssigned ToZuz 
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionsuspended 
Platformx86OSWindowsOS Version98 SE
Product Version1.71 
Target VersionFixed in Version1.71 
Summary0000223: Проблема с изменением атрибутов папки, когда сервер на W9x, а клиент старше (например, WXP)
DescriptionЗаходим в расшаренную папку на W9x с клиента WXP, создаём пустую папочку, и пытаемся изменить атрибуты этой папочки (CRTL-A), в диалоге ничего не меняем (все галки пустые), после запуска команды получаем ошибку: "Такой запрос не поддерживается. Не удалось установить время файла для имя_папки".
Причем если выбрать в диалоге изменения файловых атрибутов режим "Обрабатывать вложенные папки", то он также ситуацию не спасет (хотя т.к. группа полей относящихся к дате не используется по идее проблем с изменением даты быть не должно и почему возникает такое сообщение об ошибке не понятно).
Галки в диалоге можно ставить любые, какие даёт, на ситуацию это не влияет, всегда одна и та же ошибка.
Стандартный Explorer с такой задачей справляется без проблем.
Если клиент W9x, то работает нормально.
Лог Filemon’a на WXP с момента нажатия CTRL-A до момента возникновения ошибки прилагается.
TagsNo tags attached.
Build

Activities

2006-07-24 07:18

 

FilemonXP.LOG (3,553 bytes)

vskirdin

2006-07-24 14:28

administrator   bugnote:0000246

Напиши маааленькую тестовую прогу, которая делает SetFileTime для такого случая.
Если ОНА, твоя прога, выставит (опять же для твоего случая) время - переокрой баг.
А пока - Known Bugs

Zuz

2006-07-25 08:01

developer   bugnote:0000251

Last edited: 2006-07-25 08:03

Эх... насколько я понял, в W9x handle на директорию получить крайне затруднительно, по крайней мере, в WIN32 API для W9x такого я не нашел (давно под MD не писал ;-), и думаю сия бага как раз от туда растет.
Открыл для себя, что под W9x FAR не умеет устанавливать для паки даже дату создания, просто молча выполняет команду, но создания дата не меняется.

Написал мааленькую тестовую прогу, но толк от неё почти никакой:

BOOL SetFileToCurrentTime(HANDLE hFile)
{
    FILETIME ft;
    SYSTEMTIME st;
    BOOL f;

    GetSystemTime(&st);
    SystemTimeToFileTime(&st, &ft);
    f = SetFileTime(hFile, &ft, &ft, &ft);

    return f;
}

int _tmain (int argc, TCHAR* argv[])
{

    HANDLE hFile=CreateFile(TEXT("\\\\V1\\TEST\\1"), // dir to open
                   GENERIC_WRITE, // open for writing
                   FILE_SHARE_READ, // share for reading
                   NULL, // default security
                   OPEN_EXISTING, // existing file only
                   FILE_FLAG_BACKUP_SEMANTICS, // directory
                   NULL); // no attr. template
 
    if (hFile == INVALID_HANDLE_VALUE)
    {
        fprintf(stderr, TEXT("Could not open directory (error %d)\n"), GetLastError());
        return 0;
    }
    if ( !SetFileToCurrentTime (hFile) )
    {
        fprintf(stderr, TEXT("Could not set directory time (error %d)\n"), GetLastError());
        CloseHandle (hFile);
        return 0;
    }

    CloseHandle (hFile);
    fprintf(stderr, TEXT("All done!"));

    return 1;
}

Как оказалось проблема в последнем параметре функции SetFileTime(hFile, &ft, &ft, &ft);
если там NULL, то ошибки (про которую я писал выше) в SetFileTime не происходит, но и изменений в атрибуты времени никаких не вносится.

Предложение сделать хотя бы так, чтобы была возможность пропустить возникающие ошибки (причем все скопом, кнопка пропустить все), а не прерывать обработку как сейчас на первой же папке (для случая, когда галка "Обрабатывать вложенные папки" включена).

И встречный вопрос: зачем меняется lpLastWriteTime при простом изменении атрибутов папки?
И зачем вообще менять любое время, когда просят просто поменять атрибуты?
Возможно ли не менять время, когда это делать не просят?

Zuz

2006-07-25 08:08

developer   bugnote:0000252

Не знаю как переоткрыть баг, нет кнопки Reopen Issue

vskirdin

2006-07-26 13:14

administrator   bugnote:0000258

Если файловая система FAT/FAT32 и ЭТО каталог, то компоненты даты/времени не будут ставится.
искать после 2124

Zuz

2006-09-18 07:14

developer   bugnote:0000280

Как-то оно не правильно для FAT полностью отрубать, для тех же flash'ек иногда необходимо и раньше работало нормально.
Предложения следующие:
1. Если группа полей, описывающих даты, не была изменена, то установку дат не производим (для наглядности те поля даты, которые не трогали, нужно "засерять", либо ещё как-то отмечать, сейчас не понятно будем ли их менять или нет).
2. В случае, если в группу полей, описывающих даты, вносились изменения, то проверять результат установки для первого каталога: установилась ли как требовалось нам для этого первого каталога дата. В случае если дата правильно не устанавливается, то выдать предупреждение, что в данном случае установка таких то атрибутов невозможна и спросить чего делать: пропустить установку дат или продолжить, но для остальных объектов установку дат не проводить.

Zuz

2006-09-18 07:17

developer   bugnote:0000281

Забыл сказать, что под Win 9x, т.к. нормальный хендл на директорию не получить, то "засерять" поля, описывающие даты, включая их описания (по аналогии как это сделано с прочими атрибутами).

Zuz

2007-07-03 06:25

developer   bugnote:0000517

Пока вернул возможность установки даты/времени для локальных дисков с FAT/FAT32, для сетевых дисков в случае ошибки она тихо игнорируется (см. после 2239)

Zuz

2007-07-05 06:02

developer   bugnote:0000532

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

Issue History

Date Modified Username Field Change
2006-07-24 07:18 Zuz New Issue
2006-07-24 07:18 Zuz File Added: FilemonXP.LOG
2006-07-24 14:28 vskirdin Note Added: 0000246
2006-07-24 14:29 vskirdin Project Far Manager 1.7x => Known Error
2006-07-25 08:01 Zuz Note Added: 0000251
2006-07-25 08:02 Zuz Note Edited: 0000251
2006-07-25 08:02 Zuz Note Edited: 0000251
2006-07-25 08:03 Zuz Note Edited: 0000251
2006-07-25 08:08 Zuz Note Added: 0000252
2006-07-26 13:09 vskirdin Project Known Error => Far Manager 1.7x
2006-07-26 13:13 vskirdin Status new => assigned
2006-07-26 13:13 vskirdin Assigned To => vskirdin
2006-07-26 13:14 vskirdin Status assigned => resolved
2006-07-26 13:14 vskirdin Fixed in Version => 1.71
2006-07-26 13:14 vskirdin Resolution open => fixed
2006-07-26 13:14 vskirdin Note Added: 0000258
2006-09-18 07:14 Zuz Status resolved => feedback
2006-09-18 07:14 Zuz Resolution fixed => reopened
2006-09-18 07:14 Zuz Note Added: 0000280
2006-09-18 07:17 Zuz Note Added: 0000281
2007-07-03 02:09 Zuz Status feedback => assigned
2007-07-03 02:09 Zuz Assigned To vskirdin => Zuz
2007-07-03 06:25 Zuz Note Added: 0000517
2007-07-05 06:02 Zuz Status assigned => resolved
2007-07-05 06:02 Zuz Resolution reopened => suspended
2007-07-05 06:02 Zuz Note Added: 0000532
2007-07-16 16:06 alexy Status resolved => closed