2013-10-27 65 views

回答

7

您的代碼有兩個錯誤,都與文件夾名稱文字有關。 SetFileAttributesW()函數需要一個Unicode字符串參數。您可以通過在字符前加字符u來指定其中的一個。其次,字符串中的任何文字反斜槓字符必須加倍,否則您也可以爲其添加r前綴。在下面的代碼中使用雙前綴。

import ctypes 
FILE_ATTRIBUTE_HIDDEN = 0x02 

ret = ctypes.windll.kernel32.SetFileAttributesW(ur'G:\Dir\folder1', 
               FILE_ATTRIBUTE_HIDDEN) 
if ret: 
    print('attribute set to Hidden') 
else: # return code of zero indicates failure -- raise a Windows error 
    raise ctypes.WinError() 

您可以找到Windows的系統錯誤代碼here。要在資源管理器中查看屬性更改的結果,請確保其「顯示隱藏文件」選項未啓用。

爲了說明什麼@eryksun在有關安排從字節字符串轉換爲Unicode自動發生評論說,你需要之前做到以下幾點調用函數來指定它的參數的適當轉換。 @eryksun還解釋了爲什麼這不是WinAPI函數的W版本中指針到字符串的默認值 - 請參閱註釋。

ctypes.windll.kernel32.SetFileAttributesW.argtypes = (
    ctypes.c_wchar_p, ctypes.c_uint32) 

然後算賬,這將工作(注意,r前綴仍然需要由於反斜槓):

ret = ctypes.windll.kernel32.SetFileAttributesW(r'G:\Dir\folder1', 
               FILE_ATTRIBUTE_HIDDEN) 
+0

當然,這可以在沒有原始win32的平臺無關的方式下完成 –

+0

martineau謝謝! – iRex

+0

David Heffernan,怎麼樣?如果它不是祕密? :) – iRex

0

試試這個代碼: 導入OS 使用os.system(「ATTRIB + h「+」文件名「)

相關問題