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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: FILETIME (Win) и Linux  (Прочитано 17229 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #15 : Март 24, 2012, 19:02 »

может все дело в представлении вещественных чисел? где-нибудь накапливается ошибка при операциях с float/double, а потом при округлении вылазит эта секунда.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
nachinaushij
Гость
« Ответ #16 : Март 24, 2012, 19:06 »

Насколько мне известно, это операции с целочисленными аргументами.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #17 : Март 24, 2012, 19:53 »

Ну эт несущественное замечание. В данном случае эмуль получает на той же файловой системе 46 секунд, а "родная" система выдаёт 47. Откуда она выкапывает одну секунду?
Ну самое банальное предположение: в файловой системе (кстати в какой?) время создания файла: 02-03-2011 11:00:46.873…
Windows миллисекунды отбросил, а в Linux округлили.
Записан
nachinaushij
Гость
« Ответ #18 : Март 24, 2012, 20:32 »

В данный момент никакой винды нет, всё происходит на ext3 (Kubuntu 11.10). Поэтому мне непонятны аргументы "Windows миллисекунды отбросил". Если их кто и "отбросил", то это Wine, но тогда возникает вопрос, а откуда он их взял?

И всё-таки, я считаю, что "отброс миллисекунд" это неправильный путь. Подозреваю, что они вообще не участвуют в работе. В бинарнике лежит значение в количестве 100-наносекундных интервалов. При вычислении по формуле (на калькуляторе) дробная часть не вылазит, а стало быть эти миллисекунды и не учитывались изначально. Чую, что копать надо в сторону технологии получения данного времени в Linux, но не силён в этом вопросе.

О! Нарыл инфу, что в ext4 используются наносекундные метки. Буду конвертить раздел.
« Последнее редактирование: Март 24, 2012, 20:51 от nachinaushij » Записан
Bepec
Гость
« Ответ #19 : Март 25, 2012, 11:09 »

Уважаемый. Я вам прямо сейчас скажу всё, что вы узнаете в последующие 5 лет, если не будете работать в Microsoft.

Вы никогда не узнаете, как высчитывается время в windows, какие обработки с ним происходят и прочая прочая прочая.

Wine - это эмулятор. Это когда человек поработал под виндой и решил сделать "чтобы было похоже".

Сами представьте - человек увидел автомобить, решил сделать его подобие. А видел то он только корпус, внутрь заглядывать ему никто не дал(и не даст). Вот с этим вот франкенштейном Linux под названием Wine вы и работаете.

PS да и задача у вас какая то бесполезная - нафига вам сотые доли секунды?
Записан
nachinaushij
Гость
« Ответ #20 : Март 25, 2012, 14:54 »

Похоже я нашёл, где собака зарыта. Скорее всего файло меняется на файловой системе FAT. В ней время изменения файла измеряется с точностью до двух секунд. Я обратил внимание, что с файлами, у которых секунды этого времени чётные, проблем нет (и в вин и в лин они дают одинаковые секунды). Сделал так, (на Linux) смотрю время последнего изменения и если секунды нечётные, то просто отнимаю 1 секунду. Вуаля! Благодарю всех за оказанное внимание.
Записан
Bepec
Гость
« Ответ #21 : Март 25, 2012, 15:25 »

Мдамс. Ну хотя б разобрались что нужно от нечётных отнимать. Грац Улыбающийся
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #22 : Март 25, 2012, 17:06 »

Похоже я нашёл, где собака зарыта. Скорее всего файло меняется на файловой системе FAT. В ней время изменения файла измеряется с точностью до двух секунд. Я обратил внимание, что с файлами, у которых секунды этого времени чётные, проблем нет (и в вин и в лин они дают одинаковые секунды). Сделал так, (на Linux) смотрю время последнего изменения и если секунды нечётные, то просто отнимаю 1 секунду. Вуаля! Благодарю всех за оказанное внимание.
Вы учтите, что на настоящей Win сейчас скорее всего будет ntfs и там секунды отбрасываться не будут.
Записан
nachinaushij
Гость
« Ответ #23 : Март 25, 2012, 17:11 »

Дело не в миллисекундах.
Записан
V1KT0P
Гость
« Ответ #24 : Март 25, 2012, 17:16 »

Похоже я нашёл, где собака зарыта. Скорее всего файло меняется на файловой системе FAT. В ней время изменения файла измеряется с точностью до двух секунд. Я обратил внимание, что с файлами, у которых секунды этого времени чётные, проблем нет (и в вин и в лин они дают одинаковые секунды). Сделал так, (на Linux) смотрю время последнего изменения и если секунды нечётные, то просто отнимаю 1 секунду. Вуаля! Благодарю всех за оказанное внимание.
Вы учтите, что на настоящей Win сейчас скорее всего будет ntfs и там секунды отбрасываться не будут.
Вот посмотрел оффициальную микрософсткую документацию:
Код:
Not all file systems can record creation and last access times, and not all file systems record them in the same manner. For example, the resolution of create time on FAT is 10 milliseconds, while write time has a resolution of 2 seconds and access time has a resolution of 1 day, so it is really the access date. The NTFS file system delays updates to the last access time for a file by up to 1 hour after the last access.
Как видим для FAT время создания с точностью до 10 миллисекунд, время изменения с точностью до 2 секунд. Так что надо было автору сперва документацию глянуть, сразу же понял бы все =).
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #25 : Март 25, 2012, 17:23 »

Он добрый человек. Пытается соединить Windows и Linux. Для него не имеет значения, что файловые системы там разнятся, механизмы и реализации Улыбающийся

FAT32 в Linux разнится с FAT32 в Windows?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #26 : Март 25, 2012, 17:36 »

Дело не в миллисекундах.
Дело в том (если залезть в википедию  Подмигивающий ), что в fat32 хранит время создания файла с точностью до 2 секунд, а ntfs - с точностью до 100 наносекунд, так что только чётными тут секунды не будут.

FAT32 в Linux разнится с FAT32 в Windows?
Я бы не поручился, что некоторых особенностей реализации нет.
Записан
nachinaushij
Гость
« Ответ #27 : Март 25, 2012, 17:40 »

Как видим для FAT время создания с точностью до 10 миллисекунд, время изменения с точностью до 2 секунд. Так что надо было автору сперва документацию глянуть, сразу же понял бы все =).
Так откуда ж мне знать, что это особенность файловой системы? Буквально первый опыт написания программы на C++ и пользования IDE Qt Creator.

Пользуясь случаем, позвольте совершенно нубский вопрос. Никак не получается сконвертить HEX строчку в число. Пуркуа?
Код
C++ (Qt)
fsum = "EBFA86D1";
quint32 d = fsum.toInt(&ok,16);

В итоге ok = false и d = 0. Вразумите, а!
Записан
nachinaushij
Гость
« Ответ #28 : Март 25, 2012, 17:42 »

Дело в том (если залезть в википедию  Подмигивающий ), что в fat32 хранит время создания файла с точностью до 2 секунд, а ntfs - с точностью до 100 наносекунд, так что только чётными тут секунды не будут.

Меня интересует время последнего изменения. Оно пишется с точностью до 2-х секунд. Думаю, это и есть источник чётности.
Записан
V1KT0P
Гость
« Ответ #29 : Март 25, 2012, 18:00 »

Код
C++ (Qt)
fsum = "EBFA86D1";
quint32 d = fsum.toInt(&ok,16);

В итоге ok = false и d = 0. Вразумите, а!
Ну а что ты хотел? Число большое и не вмещается в int, а так как тебе нужен uint то и используй соответствующее преобразование:
Код
C++ (Qt)
quint32 d = fsum.toUInt(&ok,16);
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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