Russian Qt Forum
Ноябрь 24, 2024, 14:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: FILETIME (Win) и Linux  (Прочитано 17219 раз)
nachinaushij
Гость
« : Март 24, 2012, 17:16 »

Помогите разобраться с проблемой. Есть программа (win32), которая хранит в бинарном файле время последнего изменения нескольких файлов. Требуется этот бинарник сформировать в Linux. Файло формируется, но есть один затык, а именно - время модификации файлов, которое пишется в данный файл. Почему-то в Linux оно иногда (половина файлов норм время выдают) отличается, причём ровно на 1 секунду. Время получаю так:
Код
C++ (Qt)
QDateTime d = QDateTime::fromTime_t((ftime-116444736000000000)/10000000);

Но дело вряд ли в Qt. В консоли, с помощью stat file.ext получаю тот же эффект. Хотя виндовая прога, будучи запущенной через wine, на том же файле показывает время, отличающееся на одну секунду. Кто-нибудь знает, как побороть?
Записан
V1KT0P
Гость
« Ответ #1 : Март 24, 2012, 18:00 »

Помогите разобраться с проблемой. Есть программа (win32), которая хранит в бинарном файле время последнего изменения нескольких файлов. Требуется этот бинарник сформировать в Linux. Файло формируется, но есть один затык, а именно - время модификации файлов, которое пишется в данный файл. Почему-то в Linux оно иногда (половина файлов норм время выдают) отличается, причём ровно на 1 секунду. Время получаю так:
Код
C++ (Qt)
QDateTime d = QDateTime::fromTime_t((ftime-116444736000000000)/10000000);

Но дело вряд ли в Qt. В консоли, с помощью stat file.ext получаю тот же эффект. Хотя виндовая прога, будучи запущенной через wine, на том же файле показывает время, отличающееся на одну секунду. Кто-нибудь знает, как побороть?
Ничего не понял.
Записан
Bepec
Гость
« Ответ #2 : Март 24, 2012, 18:14 »

Бгг. Добрый человек под разными операционками пытается получить одно время, причем используя эмуляцию систем...

Да вы истинный извращенец Улыбающийся
Записан
nachinaushij
Гость
« Ответ #3 : Март 24, 2012, 18:16 »

Win32 прога смотрит время модификации файлов и складывает их в бинарный файл. Моя прога (QT, Linux) считывает это время и сравнивает с временем, полученным уже в Linux. Например, в бинарнике записано:
129435156460000000. По формуле, приведённой выше, я получаю 02-03-2011 11:00:46. Запускаю вин-прогу под wine'ом и на этом же файле получаю такую же дату и время. А вот когда я делаю в своей программе:
Код
C++ (Qt)
QFileInfo inf(fname);
QDateTime ftm = inf.lastModified();

То получаю 02-03-2011 11:00:47 Тудыть его!!!
Записан
nachinaushij
Гость
« Ответ #4 : Март 24, 2012, 18:19 »

Бгг. Добрый человек под разными операционками пытается получить одно время, причем используя эмуляцию систем...

Да вы истинный извращенец Улыбающийся
Эмуляция используется только на период "изготовления" рабочего кода. Как только добьюсь приемлемого результата, то сразу забуду об wine. Зуб даю! Так что никакого изврата. Но скажите мне пожалуйста, как виндовая прога под эмулем получает то, что мне надо получить без эмуля? Откуда она вынимает это время? Файло одно и то же, файловая система на разделе ext3.
Записан
V1KT0P
Гость
« Ответ #5 : Март 24, 2012, 18:20 »

Win32 прога смотрит время модификации файлов и складывает их в бинарный файл. Моя прога (QT, Linux) считывает это время и сравнивает с временем, полученным уже в Linux. Например, в бинарнике записано:
129435156460000000. По формуле, приведённой выше, я получаю 02-03-2011 11:00:46.
Зачем какие-то формулы, деления и т.д. Чем тебе не угодил Unix TimeStamp?
Записан
nachinaushij
Гость
« Ответ #6 : Март 24, 2012, 18:24 »

Зачем какие-то формулы, деления и т.д. Чем тебе не угодил Unix TimeStamp?
Мне требуется сравнить этот самый Unix TimeStamp с тем, что прописано в файле. И если оно отличается, то сформировать файл с обновлёнными данными, который будет потом использоваться на виндовых машинах.
Записан
Bepec
Гость
« Ответ #7 : Март 24, 2012, 18:30 »

Он добрый человек. Пытается соединить Windows и Linux. Для него не имеет значения, что файловые системы там разнятся, механизмы и реализации Улыбающийся
Записан
V1KT0P
Гость
« Ответ #8 : Март 24, 2012, 18:33 »

Win32 прога смотрит время модификации файлов и складывает их в бинарный файл. Моя прога (QT, Linux) считывает это время и сравнивает с временем, полученным уже в Linux. Например, в бинарнике записано:
129435156460000000. По формуле, приведённой выше, я получаю 02-03-2011 11:00:46. Запускаю вин-прогу под wine'ом и на этом же файле получаю такую же дату и время. А вот когда я делаю в своей программе:
Код
C++ (Qt)
QFileInfo inf(fname);
QDateTime ftm = inf.lastModified();

То получаю 02-03-2011 11:00:47 Тудыть его!!!
Ты уверен что в Linux-е время файла измеряется с точностью до миллисекунд. И может эта секунда является округлением онных?
Записан
nachinaushij
Гость
« Ответ #9 : Март 24, 2012, 18:36 »

Он добрый человек. Пытается соединить Windows и Linux. Для него не имеет значения, что файловые системы там разнятся, механизмы и реализации Улыбающийся
Ну сейчас то я нахожусь на одной файловой системе. Или wine, запускаясь, на лету меняет файловую систему раздела?
« Последнее редактирование: Март 24, 2012, 18:38 от nachinaushij » Записан
nachinaushij
Гость
« Ответ #10 : Март 24, 2012, 18:37 »

Ты уверен что в Linux-е время файла измеряется с точностью до миллисекунд. И может эта секунда является округлением онных?
Если это может сделать эмуль, почему я не могу?
Записан
Bepec
Гость
« Ответ #11 : Март 24, 2012, 18:39 »

Эмуль - это ИМИТАЦИЯ. Которая не является 100% копией, а лишь иная программа, подделывающая что-то.
Записан
nachinaushij
Гость
« Ответ #12 : Март 24, 2012, 18:42 »

Ну эт несущественное замечание. В данном случае эмуль получает на той же файловой системе 46 секунд, а "родная" система выдаёт 47. Откуда она выкапывает одну секунду?
Записан
V1KT0P
Гость
« Ответ #13 : Март 24, 2012, 18:48 »

Ну эт несущественное замечание. В данном случае эмуль получает на той же файловой системе 46 секунд, а "родная" система выдаёт 47. Откуда она выкапывает одну секунду?
Выводи время в секундах, может на этапе преобразования в форматированный вид что-то там не так делается(Почитай про время, раз в 4 года високостный год, иногда через какой-то период появляется дополнительная секунда и существует 60 секунд).
Записан
Bepec
Гость
« Ответ #14 : Март 24, 2012, 18:58 »

Я лично незнаю ) Попробуй сделать проще. Попроси исходники Windows, возьми исходники Linux. Выдерни из обоих ф-цию получения времени создания файла и сравни. Улыбающийся
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.114 секунд. Запросов: 21.