C# 无法在UWP(Windows 10应用程序)C中压缩空白文本文件(大小为0KB)
我有一个UWP应用程序通用Windows平台。我正在尝试压缩文件夹及其内容子文件夹、图像、文本文件 如果文本文件不是空的,它工作得很好 但当任何文本文件为空白或0 KB大小为空时,它会给出一个例外 错误如下: {System.ArgumentException:指定的缓冲区索引不在缓冲区容量内。 位于System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions.ToArrayIBuffer源,UInt32源索引,Int32计数 位于System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions.ToArrayBuffer源 在SmartflowRuntimes.Service.d__54.MoveNext -来自引发异常的上一个位置的堆栈结束跟踪-- 在System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccessTask任务中 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotificationTask任务中 在System.Runtime.CompilerServices.TaskAwaiter.GetResult 在SmartflowRuntimes.Service.d__54.MoveNext -来自引发异常的上一个位置的堆栈结束跟踪-- 在System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccessTask任务中 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotificationTask任务中 在System.Runtime.CompilerServices.TaskAwaiter.GetResult 在SmartflowRuntimes.Service.d_u53.MoveNext} 这是我的代码: 这个问题有解决办法吗?谢谢。此System.ArgumentException是从WindowsRuntimeBufferExtensions.ToArray方法引发的,该方法要求IBuffer的大小大于0 因此,要解决这个问题,请在调用此方法之前检查文件大小,就像在调用对象引用的方法之前经常检查对象引用是否为null一样C# 无法在UWP(Windows 10应用程序)C中压缩空白文本文件(大小为0KB),c#,windows-runtime,uwp,windows-10-universal,C#,Windows Runtime,Uwp,Windows 10 Universal,我有一个UWP应用程序通用Windows平台。我正在尝试压缩文件夹及其内容子文件夹、图像、文本文件 如果文本文件不是空的,它工作得很好 但当任何文本文件为空白或0 KB大小为空时,它会给出一个例外 错误如下: {System.ArgumentException:指定的缓冲区索引不在缓冲区容量内。 位于System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions.ToArrayIBuffer源,UInt32
ZipArchiveEntry readmeEntry = archive.CreateEntry(file.Path.Remove(0, baseDirPath.Length));
ulong fileSize = (await file.GetBasicPropertiesAsync()).Size;
byte[] buffer = fileSize > 0 ? (await FileIO.ReadBufferAsync(file)).ToArray()
: new byte[0];
using (Stream entryStream = readmeEntry.Open())
{
await entryStream.WriteAsync(buffer, 0, buffer.Length);
}
顺便说一下,WindowsRuntimeBufferExtensions.ToArray是一个,它允许您在IBuffer实例上调用不存在的ToArray方法,因此称为扩展方法。我还演示了如何以更方便的方式调用它
ZipArchiveEntry readmeEntry = archive.CreateEntry(file.Path.Remove(0, baseDirPath.Length));
ulong fileSize = (await file.GetBasicPropertiesAsync()).Size;
byte[] buffer = fileSize > 0 ? (await FileIO.ReadBufferAsync(file)).ToArray()
: new byte[0];
using (Stream entryStream = readmeEntry.Open())
{
await entryStream.WriteAsync(buffer, 0, buffer.Length);
}