2015-01-11 3 views
0

내 프로그램이 C : \ Windows 디렉토리를 반복적으로 통과하고 파일의 md5 체크섬을 비롯한 많은 세부 정보를 얻으려고합니다. 그것은 파일의 체크섬을 취할 수있는 권한을 얻을 수 없다는 사실을 제외하고는 훌륭하게 작동합니다. 이 함수는 내 주요 함수에서 호출되며, 변수 filename은 해시하려는 파일의 전체 경로입니다. 이 오류는 오류가있는 f = open(filename,'rb')와의 통화를 발생파이썬에서 Windows 7 해시 용 시스템 파일 열기

---> 84  f = open(filename,'rb') 
85  for chunk in iter(lambda: f.read(128*md5.block_size),b''): 
86   md5.update(chunk) 

IOError: [Errno 13] Permission denied: 'C:\\Windows\\Microsoft.NET' 

다음은 함수의 :이 프로그램은 파일을 변경하지 않는

def checksum_md5(filename): 
    md5 = hashlib.md5() 
    f = open(filename,'rb') 
    for chunk in iter(lambda: f.read(128*md5.block_size),b''): 
     md5.update(chunk) 
     return md5.hexdigest() 

, 그것은 단지 그들을 읽고 검사를받을 필요가있다. 어떻게 작동시킬 수 있습니까? C : \ Windows \ Microsoft.NET 디렉터리까지 작동하며 예상대로 작동합니다.

감사합니다.

는 -Golfer는

당신이 코멘트에서 언급했듯이
+0

가 있는지 확인 이 폴더에 대한 전체 액세스 권한이 사용자에게 있습니다 (읽기 및 쓰기 권한). 이동 방법 알려주세요 –

+0

takeown 및 icacls를 모두 사용하여 C : \ Windows \ * 디렉토리의 모든 권한을 사용자에게 부여하려고 시도했습니다. 여전히 나에게 동일한 액세스 권한을 부여합니다. 내 특정 사용자 권한을 부여하고 다른 하나는 관리자 그룹 권한을 부여하는 두 가지 다른 시도했다. – 1998golfer

+0

'C : \ Windows \ Microsoft.NET' 파일입니까, 아니면 디렉토리입니까? – duskwuff

답변

1

, 열려고하는 객체가 디렉토리가 아닌 파일입니다. Windows에서는 이와 같은 디렉터리를 열고 읽을 수 없습니다. *

개체가 디렉터리인지 확인하려면 os.path.isdir() 함수를 사용하십시오. 전달 된 경로가 디렉토리 인 경우 True을 반환합니다. os.pathisfile() 기능을 가지고 있습니다.이 기능은 경로가 일반 파일인지 확인하는 경우를 제외하고는 똑같습니다.


* :. 그것은 열고 때로는 open()에 특별한 플래그 일부 운영 체제 (의 디렉토리에서 읽을 수하지만, 그건 당신이 어쨌든 여기에 수행 할 작업이 아니다

+0

감사합니다. 나는 os.path.isdir (name) == True가 아닌 경우에만 실행을 시도했지만 여전히 C : \ Windows \ Microsoft.NET을 통과시킵니다. 대신 isfile()을 사용해 보았는데 완벽하게 작동했습니다. 정말 고맙습니다! – 1998golfer

+0

@ 1998golfer 정답으로 확인하십시오. 너 둘 다 대표를 얻는다. xD –

+0

좋아, 그랬어. python은 이제 C : \ Windows에있는 모든 파일의 파일 이름, 전체 경로 및 md5sum을 포함하는 sqlite 데이터베이스를 만듭니다. 이것은 다소 시간이 걸릴 수 있습니다. – 1998golfer