1 ## @file 2 # Override built in function file.open to provide support for long file path 3 # 4 # Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR> 5 # This program and the accompanying materials 6 # are licensed and made available under the terms and conditions of the BSD License 7 # which accompanies this distribution. The full text of the license may be found at 8 # http://opensource.org/licenses/bsd-license.php 9 # 10 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 # 13 14 import os 15 import platform 16 import shutil 17 import codecs 18 19 ## 20 # OpenLongPath 21 # Convert a file path to a long file path 22 # 23 def LongFilePath(FileName): 24 FileName = os.path.normpath(FileName) 25 if platform.system() == 'Windows': 26 if FileName.startswith('\\\\?\\'): 27 return FileName 28 if FileName.startswith('\\\\'): 29 return '\\\\?\\UNC\\' + FileName[2:] 30 if os.path.isabs(FileName): 31 return '\\\\?\\' + FileName 32 return FileName 33 34 ## 35 # OpenLongFilePath 36 # wrap open to support opening a long file path 37 # 38 def OpenLongFilePath(FileName, Mode='r', Buffer= -1): 39 return open(LongFilePath(FileName), Mode, Buffer) 40 41 def CodecOpenLongFilePath(Filename, Mode='rb', Encoding=None, Errors='strict', Buffering=1): 42 return codecs.open(LongFilePath(Filename), Mode, Encoding, Errors, Buffering) 43 44 ## 45 # CopyLongFilePath 46 # wrap copyfile to support copy a long file path 47 # 48 def CopyLongFilePath(src, dst): 49 with open(LongFilePath(src), 'rb') as fsrc: 50 with open(LongFilePath(dst), 'wb') as fdst: 51 shutil.copyfileobj(fsrc, fdst) 52 53 ## Convert a python unicode string to a normal string 54 # 55 # Convert a python unicode string to a normal string 56 # UniToStr(u'I am a string') is 'I am a string' 57 # 58 # @param Uni: The python unicode string 59 # 60 # @retval: The formatted normal string 61 # 62 def UniToStr(Uni): 63 return repr(Uni)[2:-1] 64