Как установить время изменения файла программно?

Как я устанавливаю время изменения файла программно в Windows?

7
задан sashoalm 8 February 2016 в 18:05
поделиться

4 ответа

Да, да:

#include <string>

int main(void)
{
    static const size_t Capacity = 12;
    std::string Months[Capacity] = { "Jan", "Feb", "Mar", "April", "May",
                                        "June", "July", "Aug", "Sep", "Oct",
                                        "Nov", "Dec" };
}

Ваши ошибки, вероятно, были связаны с чем-то другим. Вы не забыли использовать std:: ? Не зная, это может быть что угодно. Была ли емкость неправильного размера? И т.д.

Обратите внимание, что ваш код не был постоянным массивом. Это:

#include <string>

int main(void)
{
    static const size_t Capacity = 12;
    static const std::string Months[Capacity] = { "Jan", "Feb", "Mar", "April",
 /* ^^^^^^^^^^^^ */                                 "May", "June", "July", "Aug",
                                                    "Sep", "Oct", "Nov", "Dec" };
}

Кроме того, вы фактически не нуждаетесь в емкости , как это покажут другие, и вы можете использовать const char * , если хотите, хотя вы потеряете интерфейс std:: Последовательности .

-121--2934019-

Если вы инициализируете массив в C++, то он не требует, чтобы был задан размер (хотя он примет один), так что:

 std::string months[] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" };

компилирует хорошо с g++ для меня, и я ожидаю, что он будет компилировать в другом месте тоже. Я ожидаю, что ваши ошибки связаны с отсутствием пространства имен std:: .

-121--2934018-

Windows (или стандартный CRT, в любом случае) имеет то же utims семейство функций, что и UNIX.

struct _utimebuf t;
t.tma = 1265140799;  // party like it's 1999
t.tmm = 1265140799;
_utime(fn, &t);

С помощью Win32 функций FILE _ BASIC _ INFO можно выполнить набор с помощью SetFileInformationStartHandle .

FILE_BASIC_INFO b;
b.CreationTime.QuadPart = 1265140799;
b.LastAccessTime.QuadPart = 1265140799;
b.LastWriteTime.QuadPart = 1265140799;
b.ChangeTime.QuadPart = 1265140799;
b.FileAttributes = GetFileAttributes(fn);
SetFileInformationByHandle(h, FileBasicInfo, &b, sizeof(b));
7
ответ дан 6 December 2019 в 07:06
поделиться

Используйте SetFileInformationByHandle с типом FileInformationType как FILE_BASIC_INFO

.
2
ответ дан 6 December 2019 в 07:06
поделиться

От: http://rosettacode.org/wiki/File/Modification_Time#C

#include <time.h>
#include <utime.h>
#include <sys/stat.h>

const char *filename = "input.txt";

int main() {
  struct stat foo;
  time_t mtime;
  struct utimbuf new_times;

  stat(filename, &foo);
  mtime = foo.st_mtime; /* seconds since the epoch */

  new_times.actime = foo.st_atime; /* keep atime unchanged */
  new_times.modtime = time(NULL);    /* set mtime to current time */
  utime(filename, &new_times);

  return 0;
}
15
ответ дан 6 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: