Имеет ли Stream ограничение в 4 ГБ в UWP?

#c# #windows #uwp #stream

#c# #Windows #uwp #поток

Вопрос:

Мне нужно записать очень большой файл из моего приложения UWP, и я попытался сделать это, используя код, аналогичный следующему:

 private async void btnWriteData_Click(object sender, RoutedEventArgs e)
    {
        FolderPicker pick = new FolderPicker();
        pick.FileTypeFilter.Add(".bin");
        StorageFolder folder = await pick.PickSingleFolderAsync();
        StorageFile oFile = await folder.CreateFileAsync("ThisIsMyTest.bin");
        long totBytes = 0;
        using (var oStream = await oFile.OpenStreamForWriteAsync())
        {
            byte[] buffer = new byte[4194304];
            long i = 0;
            Random rnd = new Random();
            while (i <= 8589934592){
                rnd.NextBytes(buffer);
                totBytes  = buffer.Length;
                Debug.WriteLine("totBytes: "   totBytes.ToString() "/8789934592");
                
                await oStream.WriteAsync(buffer,0,(int)buffer.Length);
            }
        }
        Debug.WriteLine("Stop!");
   }
 

Когда я нажимаю кнопку, связанную с этим событием, я наблюдаю за ходом операции.
Папка назначения находится на диске с большим количеством свободного места, но когда общий объем записанных байт достигает 4.294.967.296 байт, приложение запускает систему.Исключение, указывающее, что недостаточно свободного места (исключение из HRESULT: 0x80070070).
Это трассировка стека:

    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.IO.BufferedStream.<WriteToUnderlyingStreamAsync>d__62.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MyApp.MainPage.<btnWriteData_Click>d__12.MoveNext() in C:UsersmatteDocumentsprojectxWindows10MyAppMainPage.xaml.cs:line 151
 

Я делаю что-то не так?
Есть ли способ записать файл размером более 4 ГБ с помощью streams?

Комментарии:

1. Единственное, что приходит на ум. Вы не используете FAT32 или используете?

2. Нет, конечно. Я использую NTFS.

3. Есть несколько вещей, которые можно было бы очистить, но, в частности, вы ничего не делаете i , кроме объявления, и ничего больше. Это огромная проблема, поскольку while от этого зависит ваш цикл, while (i <= 8589934592) это всегда будет верно…

4. Да, я знаю это, потому что это просто код для проверки, могу ли я выйти за пределы 4 ГБ.

5. Не могли бы вы рассказать мне, какие платформы решений использует ваш проект? Вы можете попробовать переключиться на платформу x64, чтобы протестировать свой проект.