Issue 1276378: tarfile: adding filed that use direct device addressing (original) (raw)

The module tarfile has problems using os.stat() if the filenames use direct device addressing on Windows systems. For example: \?\GLOBALROOT\Device\HarddiskVolume1\TEMP\1.txt

The following error is reported: Traceback (most recent call last): File "C:\urbanp\py\test.py", line 9, in ?

tar.add('\\?\GLOBALROOT\Device\HarddiskVolume1\TEMP\1.txt', 'TEMP\1.txt') File "C:\PROGRA1\Python23\lib\tarfile.py", line 1204, in add tarinfo = self.gettarinfo(name, arcname) File "C:\PROGRA1\Python23\lib\tarfile.py", line 1080, in gettarinfo statres = os.lstat(name) OSError: [Errno 2] No such file or directory: '\\?\GLOBALROOT\Device\HarddiskVolume1\TEMP\1.txt'

As a solution we can use win32file.GetFileAttributesEx(). I mapped win32file.GetFileAttributesEx result into a tuple that has the same structure as a os.stat result tuple. Therefore, the same variable can be used.

The reason for using direct device addressing is that I need to create a tar package from a volume snapshot (vss on Windows 2003) that cannot be mounted. The solution also works on StorageCraft VSnap snapshots.