![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Установить дату папке(KOL) [Delphi, Windows]
DDA2 © (2003-11-22 21:21:00)Господи,помогите же кто -нибудь установить дату на папки.
Ну ни как не могу поставить
Целый день мучаюсь
Дайте реальный - полноценый пример(пажалуйста)
DDA (2003-11-25 19:08:00) [1]попробывал FILE_ATTRIBUTE_DIRECTORY - не помогло
я даже все переменные функции CreateFile (2 3 5 6 переменные)
поставил в цикл(вышло где-то 765 комбинаций) и то не сработало ни на одной комбинации
Бли ,Что же делать как же быть
Кто-нибудь попробуйте код программы сверху на ОС 98Win
Может у меня что - нибудь тупит
Ciber SLasH (2003-11-25 02:11:00) [2]2 DDA:
Да верно этот параметр только в NT. У меня стоит WinXP, поэтому не было возможности проверить код под Win9x.
Попробуй последний параметр поменять на: FILE_ATTRIBUTE_DIRECTORY.
DDA (2003-11-24 23:33:00) [3]Проверил в XP работает
Это случайно не из-за этого
(Help to CreateFile)
FILE_FLAG_BACKUP_SEMANTICS
Windows NT only: Indicates that the file is being opened or created for a backup or restore operation. The operating system ensures that the calling process overrides file security checks, provided it has the necessary permission to do so. The relevant permissions are SE_BACKUP_NAME and SE_RESTORE_NAME.You can also set this flag to obtain a handle to a directory. A directory handle can be passed to some Win32 functions in place of a file handle.
DDA (2003-11-24 23:10:00) [4]Извиняюсь-ошибочно написал
ShowMessage((SysErrorMessage( GetLastError ) ));
выдает 5 "Нет доступа"
3 ('Системе не удается найти указаный путь')выдает когда
прописываю в программу стороку
ShowMessage((SysErrorMessage( GetLastError ) ));
между HFile и условием первым
DDA (2003-11-24 23:01:00) [5]Почему же не работает - то?
Какие у вас ОС?
DDA (2003-11-24 22:59:00) [6]Странные вещи какие-то происходят
Как бы GetLastError возвращает 3 - Нет Доступа
ShowMessage((SysErrorMessage( GetLastError ) ));
когда раньше стояла как написано было
hFile := CreateFile('D:\Temp\1',GENERIC_WRITE,FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0);
if (hFile <> INVALID_HANDLE_VALUE) or (GetLastError = 0) then
то условие IF не выполнялось
а когда поставил
hFile := CreateFile(pchar('C:\Temp'),GENERIC_WRITE,FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0);
ShowMessage(( SysErrorMessage( GetLastError ) ));
if (hFile <> INVALID_HANDLE_VALUE) or (GetLastError = 0) then
то условие стало выполнятся но всё равно выводило что
(Не удалось изменить дату !)
Кстати пробывал и '\' и '\.' и '\..'
когда ставил в конце '\' то
ShowMessage(( SysErrorMessage( GetLastError ) ));
выводило 'Системе не удается найти указаный путь'
У меня 98se Delphi 6
Фиг знает почему у меня не работает
Vladimir Kladov (2003-11-24 21:37:00) [7]в некоторых ос наличие '\' на конце имени директории играет решающую роль.
Ciber SLasH (2003-11-24 20:29:00) [8]2 DDA
Блин даже не знаю...
У меня приведённый кусок кода работает.
А чё после CreateFile GetLastError возвращает ?
DDA (2003-11-24 19:05:00) [9]Кстати, на файлах срабатывает ,а на папках нет
???
DDA (2003-11-24 19:01:00) [10]Ciber SLasH ©
НУ не работает почему-то
HFile возвращает INVALID_HANDLE_VALUE
Указал папку 'c:\temp\1'
Пробавал и с существованием этой папки и без сущ. на диске 'C'
не выходит
Что делать-то?
DDA (2003-11-24 18:08:00) [11]Большое Спасибо Мастера
Ciber SLasH (2003-11-24 03:00:00) [12]2 DDA2
Вот тебе работающая прога по изменению даты:
program Project1;
uses
Windows;
var
hFile: Hwnd;
SysTime: TSystemTime; // структура содержащая системное время
FileTime: TFileTime; // структура с информацией о дате
Rez: Boolean;
begin
hFile := CreateFile('D:\Temp\1',GENERIC_WRITE,FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0);
if (hFile <> INVALID_HANDLE_VALUE) or (GetLastError = 0) then
begin
SysTime.wYear := 2000;
SysTime.wMonth := 1;
SysTime.wDay := 1;
SysTime.wHour := 1;
SysTime.wMinute := 1;
SysTime.wSecond := 1;
Rez := SystemTimeToFileTime(SysTime, FileTime); // преобразум системное время во время папки
{ ################################################################################
######################## Параметры функции SetFileTime: ########################
################################################################################
## 1 - хэндл фала для которого необходимо установить дату и время ##
## 2 - указатель на структуру с информацией о дате создания файла ##
## 3 - указатель на структуру с информацией о дате последнего доступа к файлу ##
## 4 - указатель на структуру с информацией о дате последней записи в файл ##
################################################################################ }
if Rez then
Rez := SetFileTime(hFile, nil, nil, @FileTime);
if not Rez then
MessageBox(0, 'Не удалось изменить дату !', 'Warning', MB_OK + MB_ICONWARNING)
else
MessageBox(0, 'Дата папки была успешно изменена.', 'Info', MB_OK + MB_ICONINFORMATION);
CloseHandle(hFile)
end
end.
Vladimir Kladov (2003-11-23 20:18:00) [13]Ну при чем тут KOL (и Господь тоже?). F1 нажать, и в справке найти, все ж написано:
Windows NT: You can obtain a handle to a directory by calling the CreateFile function with the FILE_FLAG_BACKUP_SEMANTICS flag set, as follows:
hDir = CreateFile (
DirName,
GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
NULL
);
You can pass a directory handle to the following functions:
BackupRead
BackupSeek
BackupWrite
GetFileInformationByHandle
GetFileSize
GetFileTime
GetFileType
ReadDirectoryChangesW
SetFileTime