2011-03-01 4 views
1

앱의 캐시 디렉토리에 .png 이미지를 저장하는 앱이 있습니다. 이러한 파일을 메시징 등을 통해 공유 할 때 파일을 일시적으로 읽을 수 있도록해야합니다. 모두 (즉 chmod 755). 나는 Runtime.getRuntime.exec를 실행하고 다른 스레드에서 제안한 것처럼Android : 파일 이름에 공백이 있으면 파일 권한 설정에 문제가 발생합니다.

()가이 작업을 수행 :

Runtime.getRuntime().exec("setperm chmod 755 /path/to/filename.png"); 

이 잘 작동, 내가 필터링/및 \ 오전으로, 어떤 이름은 작동 ... 공간을 가진 이름을 제외하고, unsurpisingly. 이것은 실패

Runtime.getRuntime().exec("setperm chmod 755 /path/to/file name.png"); 

그래서, 리눅스에서오고, 나는 리눅스에서 작동하지만, 여전히 안드로이드에서 파일 파마를 변경하지 따옴표로 파일 경로, 포장하려고 :

Runtime.getRuntime().exec("setperm chmod 755 \"/path/to/file name.png\""); 
or 
Runtime.getRuntime().exec("setperm chmod 755 '/path/to/file name.png'"); 

어떤 아이디어 ?

감사합니다,

+1

모든 공백을 밑줄로 변경하면 어떨까요? – davidk01

+0

실제로이 작업을 수행 할 수 있었는지, 왜 공백이 실패했는지, 그리고 내가 잘못된 것을하고 있는지 궁금해했습니다. –

답변

1

내가 응용 프로그램의 캐시 디렉토리에서 .png를 이미지를 저장하는 응용 프로그램을 가지고, 내가 메시징 등을 통해이 파일을 공유하고, 나는이 파일을 만들 필요가 모든 사람이 일시적으로 읽을 수 있습니다 (예 : chmod 755).

캐시 디렉토리에 넣지 마십시오. openFileOutput()을 사용하고 MODE_WORLD_READABLE으로 설정하십시오. 다른 스레드에서 제안한 것처럼

것은, 내가 Runtime.getRuntime.exec를 실행하고하는 것은()이 작업을 수행합니다 :

당신에게 바보라고 제안 누구든지. 안드로이드 애플리케이션은 exec()을 사용해야합니다. SDK에 포함되어 있고 거기에 의존 할 수있는 명령 행 바이너리는 없습니다.


UPDATErelated android-developers thread에서

는, 다이앤 Hackborn (@hackbod) 글 :

이 작업을 수행하기 위해 권장되는 방법입니다 콘텐츠 제공자, 다른 응용 프로그램 수를 쓰기 ContentResolver.openFileDescriptor() 등을 호출하십시오. 실제로는 ContentProvider.openFile()을 구현하기 위해 데이터베이스 나 다른 것이 필요하지 않습니다.

모든 상황에서 MODE_WORLD_ *가 사용되는 곳에서는 모든 상황에서 콘텐츠 공급자를 작성하는 것보다 더 많은 문제가 발생합니다. 나는 그것을 만든 것을 후회한다.

+0

Dianne의 해설에서 정보를 편집 해 주셔서 감사합니다. 설명 된대로 COntentProvider 메서드를 사용하려고합니다. –

0

개발 중에 앱의 데이터에 액세스하고 싶지만 휴대 전화의 루트를 지정하지 않으려는 경우 exec() 솔루션이 잘 작동합니다. 프로덕션 코드에서는 사용해서는 안되지만 내 데이터베이스에 도착하기 위해 에뮬레이터를 실행하는 데 많은 시간을 절약 할 수 있다는 것에 동의합니다.

관련 문제