2011-06-28 6 views
3

C#ではWP7用の簡単なfacebookアプリケーションを作成していますが、問題が発生しました。System.IO.FileにReadAllBytesが含まれていませんC#

私は、アルバムやフィードの画像をアップロードできる部分をしようとしています。

コード:

FacebookMediaObject facebookUploader = new FacebookMediaObject { FileName = "SplashScreenImage.jpg", ContentType = "image/jpg" }; 

var bytes = System.IO.File.ReadAllBytes(Server.MapPath("~") + facebookUploader.FileName); 
facebookUploader.SetValue(bytes); 

エラー:

  • System.IO.Fileあなたはそこに問題のカップルを持っているReadAllBytes
+1

1のコードで別の質問としてこれを掲示するために含まれていました。 – phooji

答えて

1

は私が解決策を見つけました。

コード:

string imageName = boxPostImage.Text; 
StreamResourceInfo sri = null; 
Uri jpegUri = new Uri(imageName, UriKind.Relative); 
sri = Application.GetResourceStream(jpegUri); 

try 
{ 
    byte[] imageData = new byte[sri.Stream.Length]; 
    sri.Stream.Read(imageData, 0, System.Convert.ToInt32(sri.Stream.Length)); 

    FacebookMediaObject fbUpload = new FacebookMediaObject 
    { 
     FileName = imageName, 
     ContentType = "image/jpg" 
    }; 
    fbUpload.SetValue(imageData); 


    IDictionary<string, object> parameters = new Dictionary<string, object>(); 
    parameters.Add("access_token", _AccessToken); 
    parameters.Add("source", fbUpload); 

    //_fbClient.PostAsync("/"+MainPage._albumId+"/photos", parameters); 
    _fbClient.PostAsync("/me/photos", parameters); 


    MessageBox.Show("Image has been posted successfully.."); 
} 
catch (Exception error) 
{ 
    MessageBox.Show("Sorry, there's an error occured, please try again."); 
} 
5

の定義が含まれていません。最初に、Server.MapPathはあなたにファイルの場所を与えるつもりはありません(あなたがWebアプリケーションにないので)。あなたは(IsolatedStorageで)探しているファイルパスを知っているしかし、一度、あなたはバイト配列としてファイルを読み込むために、このような何かを行うことができます。

public byte[] ReadFile(String fileName) 
    { 
     byte[] bytes; 
     using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      using (IsolatedStorageFileStream file = appStorage.OpenFile(fileName, FileMode.Open, FileAccess.Read)) 
      { 
       bytes = new byte[file.Length]; 

       var count = 1024; 
       var read = file.Read(bytes, 0, count); 
       var blocks = 1; 
       while(read > 0) 
       { 
        read = file.Read(bytes, blocks * count, count); 
        blocks += 1; 
       } 
      } 
     } 
     return bytes; 
    } 
+4

私は 'isolatedStorageFileStream'のために" using "ブロックを使い、' Read'への一回の呼び出しで全てを得ることになるのではなく、ループで読み込みます。 –

+0

ストリームのための使用ブロックを使用するように更新されました - 提案のおかげで。 –

+0

... Aaannndは、ファイルの長さがInt64で、ファイル全体を一度に読み取るRead機能を超える可能性があることを突き止めたので、ループを読み直すように再度更新しました。私を正直にしてくれてありがとう、ジョン。 –

関連する問題