· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Изменить дату создания файла

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Июл 2, 2003 10:17:26

... есть файл а.txt созданный 13.03.2000 нужно заменить его на b.txt 02.07.2003 НО после этого сделать чтобы b.txt был 13.03.2003
Делаю так GetFileTime(find_handle,&time_last_Create,&time_last_Access,&time_last _Write);
DeleteFile(tmp);
CopyFile(taget,tmp,TRUE);
SetFileTime(find_handle,NULL,NULL,&time_last_Write);
depo_sampl=CreateFile(tmp_,GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
SetFileTime(depo_sampl,&time_last_Create,&time_last_Access,&time_last_ Write)

... файл заменяется но дата создания старой не становится. Подскажите пожалуйста . Может фрагментом кода на любом языке если можно. Спасибо.


Дата: Июл 2, 2003 11:07:24 · Поправил: P2M

У меня работает так:

#include <windows.h>

int main(int argc, char *argv[])
{
HANDLE find_handle, depo_sampl;
FILETIME ftCreate, ftAccess, ftWrite;

find_handle = CreateFile(argv[1], GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
GetFileTime(find_handle, &ftCreate, &ftAccess, &ftWrite);
SetFileTime(find_handle, NULL, NULL, &ftWrite);
CloseHandle(find_handle);

CopyFile(argv[1], argv[2], TRUE);

depo_sampl = CreateFile(argv[2], GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
SetFileTime(depo_sampl, &ftCreate, &ftAccess, &ftWrite);
CloseHandle(depo_sampl);

return 0;
}


Дата: Июл 2, 2003 11:23:48

... Да но задача то какая есть файл , нужно подложить туда другой файл но дату создания нужно оставить старую...
значит :
1. GetFileTime
2. time_last_XXX -> в (SYSTEMTIME)
3. (SYSTEMTIME)-> в (FILETIME)
4. (FILETIME) -> в SetFileTime
... получается так ???


Дата: Июл 2, 2003 11:28:35

Я исправил пост (до Вашего ответа).


Дата: Июл 2, 2003 11:30:03

... извините но я коментировал не этот ответ Уважаемого P2M .После обновления страницы коментарий Уважаемого P2M превратился совершенно в другой ... удивительное РЯДОМ!!!
Спасибо за код !!!


Дата: Июл 2, 2003 11:32:00

А зачем SetFileTime для find_handle?


Дата: Июл 2, 2003 11:39:45

... это find_handle осталось от связки
find_handle=FindFirstFile(mask,&ff);
...
if (!FindNextFile(find_handle,&ff)) break;... я привел не весь код а только часть из процедуры обхода директорий.


Дата: Июл 2, 2003 11:49:09

Т.е. find_handle не от CreateFile и у Вас работала GetFileTime?


Дата: Июл 2, 2003 11:54:50

... приведу весь код#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <winbase.h>
#include <conio.h>
#include <string.h>

FILETIME time_last_Write={0,0};

void Dirr (char *path)//,char *taget
{
char mask[MAX_PATH],tmp[MAX_PATH],tmp_[MAX_PATH];
//char tmp_gdb[MAX_PATH];
char taget[MAX_PATH]="depo.gdb";

HANDLE find_handle;


WIN32_FIND_DATA ff;



strcpy (mask,path);
strcat (mask,"*.*");
find_handle=FindFirstFile(mask,&ff);
if (find_handle==INVALID_HANDLE_VALUE)
{
printf ("%s\n%s\n","INVALID_HANDLE_VALUE",mask);
return;
}


while (1)
{
if (ff.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
if (*ff.cFileName!='.')
{
strcpy(tmp,path);
strcat(tmp,ff.cFileName);
strcat(tmp,"\\");

Dirr(tmp);//,taget
}
}
else
{
strcpy(tmp,path);
strcpy(tmp_,tmp);

strcat(tmp,ff.cFileName);
strcat(tmp_,taget);


printf("%s\n",tmp);

GetFileTime(find_handle,NULL,NULL,&time_last_Write);
DeleteFile(tmp);
CopyFile(taget,tmp,TRUE);
//SetFileTime(Handle, nil, nil, @FileTime) then Exit;
//SetFileTime(find_handle,NULL,NULL,&time_last_Write);
HANDLE depo_sampl=CreateFile(tmp_,GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
SetFileTime(depo_sampl,NULL,NULL,&time_last_Write);

CloseHandle(depo_sampl);

}
if (!FindNextFile(find_handle,&ff)) break;
}
FindClose(find_handle);
}



int main(int argc, char* argv[])
{

char path[MAX_PATH];


strcpy(path,argv[1]);
strcat(path,"\\");
//strcpy(taget,argv[2]);

Dirr (path);//,taget

return 0;

}


Дата: Июл 2, 2003 12:03:51

1. Можно создать каталог начинающийся с "." и "..", поэтому Ваша проверка if (*ff.cFileName!='.') не совсем корректна.
2. Почему Вы не проверяете результат работы GetFileTime, может быть она не работает?


Дата: Июл 2, 2003 12:11:55

... да нет все показало
SYSTEMTIME syst_Time={0,0,0,0,0,0,0,0};
...
FileTimeToSystemTime(&ff.ftLastWriteTime,&syst_Time);
...
printf(...) и у меня правильная дата последней записи найденного файла :)


Дата: Июл 2, 2003 12:19:19

... printf ("%d.%d.%d\n"
,syst_Time.wDay
,syst_Time.wMonth
,syst_Time.wYear);

то есть видимо можно использовать и этот указатель ?


Дата: Июл 2, 2003 12:44:38

... я добавил строку в Ваш код но после отработки файл argv[2] всетаки имеет дату создания argv[1] а хотелось получить дата создания argv[2] а сам файл argv[1].
То есть ДО
file1(data1) file2(data2)
ПОСЛЕ
file1(data1) file1(data2)


Дата: Июл 2, 2003 12:46:10

... я испробовал Ваш код но после отработки файл argv[2] всетаки имеет дату создания argv[1] а хотелось получить дата создания argv[2] а сам файл argv[1].
То есть
ДО
file1(data1) file2(data2)
ПОСЛЕ
file1(data1) file1(data2)


Дата: Июл 2, 2003 12:48:48

... а получилось ДО
file1(data1) file2(data2)
ПОСЛЕ
file1(data1) file2(data1)

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.090