Windows os.stat and os.fstat report different st_ctime_ns values
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 72/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- operating-systems
Línea de trabajo
Comienza con Python/fileutils.c en _Py_attribute_data_to_stat y _Py_fstat_noraise; después inspecciona Modules/posixmodule.c en os_fstat_impl y win32_xstat. Ejecuta la reproducción proporcionada en Windows y verifica que os.stat() y os.fstat() informen de valores ctime_ns coincidentes, conservando el comportamiento mostrado de la hora de creación.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Bug description:
On Windows, os.stat(path).st_ctime_ns and os.fstat(fd).st_ctime_ns can differ for the same file.
I ran the example below on Windows 11 with NTFS. It fails with both official Python 3.14.7 Windows builds: ARM64 running natively and x64 running under emulation. The same-file assertion passes, but the timestamp assertion fails. Both st_birthtime_ns values equal os.stat(path).st_ctime_ns.
In the 3.14.7 code:
_Py_attribute_data_to_statassignsFILE_BASIC_INFO.ChangeTimetost_ctime._Py_fstat_noraisereturns that result.os_fstat_impldoes not change the timestamp.win32_xstatreplacesst_ctimeand its nanoseconds withst_birthtimefor compatibility.
Commit a01fb672 added that compatibility step. The discussion in #102149 says st_ctime should continue returning creation time during the deprecation period. Should fstat() do the same?
In #117354, DirEntry.stat() was changed to return creation time during the same deprecation period, following #117267.
Example:
import os
import time
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as directory:
path = Path(directory) / "example.txt"
path.write_text("before")
time.sleep(0.1)
path.write_text("after")
with path.open("rb") as source:
by_path = os.stat(path)
by_fd = os.fstat(source.fileno())
print("stat ctime:", by_path.st_ctime_ns)
print("fstat ctime:", by_fd.st_ctime_ns)
print("stat birthtime:", getattr(by_path, "st_birthtime_ns", None))
print("fstat birthtime:", getattr(by_fd, "st_birthtime_ns", None))
assert os.path.samestat(by_path, by_fd)
assert by_path.st_ctime_ns == by_fd.st_ctime_ns
Output from the official Python 3.14.7 ARM64 build:
stat ctime: 1789643317486473600
fstat ctime: 1789643317591142500
stat birthtime: 1789643317486473600
fstat birthtime: 1789643317486473600
The final assertion raises AssertionError.
CPython versions tested on:
- 3.10.20 (conda-forge build): timestamps match.
- 3.14.6 (Anaconda build): timestamps differ.
- 3.14.7: timestamps differ with both official Windows embeddable builds, ARM64 and x64.
Operating systems tested on:
Windows 11 ARM64, build 26200.9457, in Parallels Desktop. The test files were on NTFS. The ARM64 Python build ran natively and the x64 build ran under Windows emulation.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 36k
- Merge medio
- 1 d 9 h
- PR fusionados (30 d)
- 558
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de python/cpython
-
docs pending
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
stdlib type-feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
stdlib type-feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
build type-bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
stdlib topic-email type-feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Todos los issues de python/cpython
Issues similares
-
link-check link-check:sphinx-theme
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
qgis/QGIS-Documentation#11275 ·
-
bug priority:normal ready-for-dev
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
OpenHands/extensions#626 · 1 comentario ·
-
Change observation tooltip text Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
CSCfi/sd-search-api#39 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100