Независимый от платформы способ сделать прикосновение к файлу? - PullRequest
1 голос
/ 14 марта 2011

Как можно достичь независимого от платформы касания, не используя фактический touch исполняемый файл? Я не могу полагаться на то, что touch находится в PATH или даже существует в определенной системе.

Ответы [ 2 ]

1 голос
/ 14 марта 2011

touch - довольно простая программа. Вы можете легко извлечь необходимые шаги и реализовать их как подпрограмму в вашей системе. См. исходный код .

touch зависит от utime(), который является POSIX и должен быть доступен на большинстве платформ.

В качестве альтернативы, вы можете просто предоставить свою собственную реализацию касания в качестве исполняемого файла (если вам нужно вызвать ее из скрипта).

1 голос
/ 14 марта 2011

Создайте пустой файл и скопируйте исходный файл + пустой файл обратно в исходный файл. Я только что проверил его на Windows, и он работал.

C:\tmp>dir \utils\emp*
 Volume in drive C has no label.
 Volume Serial Number is BC80-0D15

 Directory of C:\utils

2011-03-14  11:58                 0 empty_file
               1 File(s)              0 bytes
               0 Dir(s)  27,506,368,512 bytes free

C:\tmp>dir *.gif
 Volume in drive C has no label.
 Volume Serial Number is BC80-0D15

 Directory of C:\tmp

2010-10-08  12:00            20,463 cknight.gif
2009-10-30  17:31         1,298,525 img-big.gif
2009-10-30  17:46           225,992 img.gif
               3 File(s)      1,544,980 bytes
               0 Dir(s)  27,506,368,512 bytes free

C:\tmp>copy /b img.gif+\Utils\empty_file /b img.gif
img.gif
\Utils\empty_file
        1 file(s) copied.

C:\tmp>dir *.gif
 Volume in drive C has no label.
 Volume Serial Number is BC80-0D15

 Directory of C:\tmp

2010-10-08  12:00            20,463 cknight.gif
2009-10-30  17:31         1,298,525 img-big.gif
2011-03-14  12:07           225,992 img.gif
               3 File(s)      1,544,980 bytes
               0 Dir(s)  27,506,368,512 bytes free

C:\tmp>
...