2013-06-18 22 views
0

要使用ByteArrayContentHttpClient上传文件,我正在将StorageFile读入byte阵列。该代码工作没有问题的图像,但它不适用于通过AudioVideoCaptureDevice生成的文件 - 即使通过文件不是空的,我仔细检查。 * 它会访问该文件以任何方式将文件读入字节数组时出现System.ArgumentException

byte[] data; 
StorageFolder folder = ApplicationData.Current.LocalFolder; 

try { 
    Debug.WriteLine("uploading: "+ fileName); 
    StorageFile file = await folder.GetFileAsync("data\\"+LocalPayload); 
    var probs = await file.GetBasicPropertiesAsync(); 
    Debug.WriteLine("path " + file.Path + "" + " size " + probs.Size); 

    try 
    { 

     var stream = await file.OpenReadAsync(); 
     using (var dataReader = new DataReader(stream)) 
     { 
      Debug.WriteLine("stream size is " + stream.Size); 
      data = new byte[stream.Size]; 
      await dataReader.LoadAsync((uint)stream.Size); 
      dataReader.ReadBytes(data); 
     } 

     Debug.WriteLine("stream was read"); 
     content = new ByteArrayContent(data); 
    } 
    catch (System.IO.FileNotFoundException e) 
    { 
     Debug.WriteLine("file not found", e.ToString()); 
     return; 
    } 
    catch (Exception e) 
    { 
     Debug.WriteLine("could not create byte array for file: " + e.ToString()); 
     return; 
    } 

} 
catch (Exception e) 
{ 
    Debug.WriteLine("could not read file: " + e.ToString()); 
    return; 
} 

这是例外

could not read file: System.ArgumentException: Value does not fall within the expected range. 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at TestApp.Models.Item.<Upload>d__1f.MoveNext() 

捕捉到我我先用录制的声音文件

IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder; 
var dataFolder = await applicationFolder.CreateFolderAsync("data", CreationCollisionOption.OpenIfExists); 
outputFile = await dataFolder.CreateFileAsync(audioFileName, CreationCollisionOption.ReplaceExisting); 
stream = await outputFile.OpenAsync(FileAccessMode.ReadWrite); 
await dev.StartRecordingToStreamAsync(stream); 

并在一些用户互动后,我打电话

await dev.StopRecordingAsync(); 
Debug.WriteLine("stopped recording"); 
await stream.FlushAsync(); 
stream.Dispose(); 

任何建议为什么有些文件正在工作,有些则不是?

谢谢!

UPDATE添加的代码创建的文件和文件夹

源UPDATE2添加代码周围的try catch来读取文件大小

+0

文件是否已关闭?这种情况下stream.Size的大小是多少? – Oren

+0

它似乎与使用await方法和编译器生成的代码有关。尝试为它提供更大尺寸的文件以查看它是否在一定尺寸后切断。你有没有行号?可能有助于使事情变得更清楚,至此消息似乎主要是编译器生成的函数。尝试捕捉异常并打印所有的细节。 – Pharap

+0

如何获得'文件夹'? –

回答

0

的问题是由于一个错误的文件名声音文件。我保存了绝对路径,而不仅仅是上面代码中使用的文件名。

谢谢大家谁试图帮助!