2016-07-22 3 views
2

저는 Xamarin을 처음 사용했습니다. .Net 어셈블리의 일부만으로 인해 많은 어려움을 겪고있는 PCL을 사용할 수 있습니다.PCL 지원을 사용하는 xamarin 크로스 플랫폼 프로젝트의 URL에서 파일을 다운로드하는 방법

로컬 드라이브에 저장하는 데 필요한 URL을 눌러 .db 파일을 다운로드해야합니다. 프로젝트가 PCL에 있으므로 내 프로젝트에서 System.IO.File을 사용할 수 없으므로 .Net 클래스 라이브러리에서 사용할 수있는 파일 작업을 수행 할 수 없게 만듭니다.

예 : URL "http://123.com/register.db"을 입력하면 register.db가 응답으로 반환됩니다. 내 로컬 저장소에있는 그대로 register.db를 저장해야합니다. URL을 칠

내 코드가 어떤 도움이 높게 평가 될 것이다

public static async Task LaunchURLForSync(string targetUrl) 
{ 
    try 
    { 
     using (HttpClient client = new HttpClient()) 
     { 
      using (HttpResponseMessage response = await client.GetAsync(targetUrl, HttpCompletionOption.ResponseHeadersRead)) 
      using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync()) 
      { 
       string fileToWriteTo = Path.GetFileName(); 
       using (Stream streamToWriteTo = File.Open(fileToWriteTo, FileMode.Create)) // This doesn't work with PCL for ex. FIle.Open etc 
       { 
        await streamToReadFrom.CopyToAsync(streamToWriteTo); 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 

다음과 같다. 미리 감사드립니다 :)

+0

코드가 정말 작동하지 않습니다 : : 라인 10 함수 경로에

, 당신은 다음을 수행 할 프로젝트의 당신의 모든에 라이브러리를 설치 한 후 당신이 원하는 것을 할 PCL 스토리지를 사용하려면 .GetFileName()은 문자열을 사용하지만 코드에는 매개 변수가 없습니다. – Radinator

+0

내가 조사한 바에 따르면 로컬 저장소에 파일을 다운로드하고 저장할 수있는 pcl 방법이 없습니다. 원하는 경우 각 플랫폼에 구현해야합니다. – Radinator

+0

@Radinator 그가 응답 한 것처럼 hVaughan3 방식대로 수행하십시오. 그것은 작동합니다. 데이터를 다운로드하여 데이터 버퍼에 저장하고 PCL 스토리지를 사용하여 로컬 스토리지에 저장할 수 있습니다. –

답변

1

PCL 코드에는 사용할 수있는 API의 하위 집합 만 있습니다. 모든 API에 액세스하려면 언젠가 각 플랫폼에 원시 코드를 작성해야합니다. Xamarin의 파일 저장소 문서 here을 읽는 것이 좋습니다.

Xamarin Forms 프로젝트에서 파일 관련 메서드를 쉽게 실행할 수 있도록 PCL Storage 플러그인을 사용하는 것이 좋습니다. Xamarin은 실제로이 라이브러리를 권장합니다.

IFile file = await folder.CreateFileAsync("myfile.abc", CreationCollisionOption.ReplaceExisting); 
byte[] buffer = new byte[100]; 
using (System.IO.Stream stream = await file.OpenAsync(FileAccess.ReadAndWrite)) { 
    stream.Write(buffer, 0, 100); 
} 
+0

늦게 답장을 드려 죄송합니다. 하지만 다른 포럼에서 해결책을 찾아 구현했습니다. 그리고 당신이 언급 한 정확한 방법을 따릅니다. HttpClient를 사용하여 데이터 버퍼를 가져오고 PCL 저장소를 사용하여 해당 파일을 로컬 저장소에 씁니다. –