将字节一次读一页到流中C#
我在下载时把一个文件分成了几页。现在我想重建文件页面,以便以页面扩展名的格式将整个文档保存到某个位置。我该怎么做?下面是我开始读取一页文件的代码,但它不适用于多页文件。当我打开输出文件时,它说它无法打开,因为它已“损坏”?我怎样才能确定这段代码,即使它没有抛出任何异常,也能正确地重建文件 是因为我没有正确设置偏移吗?我的偏移量始终为0将字节一次读一页到流中C#,c#,C#,我在下载时把一个文件分成了几页。现在我想重建文件页面,以便以页面扩展名的格式将整个文档保存到某个位置。我该怎么做?下面是我开始读取一页文件的代码,但它不适用于多页文件。当我打开输出文件时,它说它无法打开,因为它已“损坏”?我怎样才能确定这段代码,即使它没有抛出任何异常,也能正确地重建文件 是因为我没有正确设置偏移吗?我的偏移量始终为0 foreach (IContentTransfer contentelement in doc.ContentElements) { if (this.S
foreach (IContentTransfer contentelement in doc.ContentElements)
{
if (this.SuspendProcess)
return ErroredRecords;
Stream inStream = contentelement.AccessContentStream();
byte[] fileBytes = new byte[inStream.Length];
string ext = Path.GetExtension(contentelement.RetrievalName);
String outPath = string.Format("{0}{1}{2}.{3}", BatchInfo.RootFolder, Path.DirectorySeparatorChar, docInfo.FileNamePrefix, ext);
FileStream fileStream = new FileStream(outPath, FileMode.Append);
fileStream.Write(fileBytes, 0, fileBytes.Length);
fileStream.Close();
}
您
foreach
循环每次都将覆盖文件,或者创建单个文件而不是一个完整的文件,我不知道是哪个。原因是您在创建输出FileStream
对象时使用了FileMode.CreateNew
FileStream fileStream = new FileStream(outPath, FileMode.CreateNew);
将其替换为FileMode.Append
应该可以解决您的问题,只要循环的每个迭代的文件路径相同
FileStream fileStream = new FileStream(outPath, FileMode.Append);
假设
doc.ContentElements
是您获取“页面”的来源,那么您所需要做的就是迭代并读取每个“页面”,然后Append
将其添加到输出文件中。唯一需要更改的行是:
FileStream fileStream = new FileStream(outPath, FileMode.CreateNew);
为此:
FileStream fileStream = new FileStream(outPath, FileMode.Append);
对于Append
enum值(强调项):
打开文件(如果存在)并查找文件末尾,或创建新文件。这需要FileIOPermissionAccess.Append权限。FileMode.Append只能与FileAccess.Write结合使用。尝试查找文件结尾之前的位置会引发IOException异常,任何读取尝试都会失败并引发NotSupportedException异常
因此,如果文件不存在,此模式将创建一个新文件,或者向现有文件添加内容
CreateNew
将始终尝试创建新文件,如果文件已存在,则会引发异常。能否展开“它不工作”?它如何工作?你的代码会抛出异常吗?你没有得到预期的结果,然后你得到了什么?你认为这意味着什么?尝试Append
。当我打开输出文件时,代码没有设置为获取每个内容元素并将其构建到原始的整个文档中,它说它无法打开,因为它已“损坏”?
当您在何处打开它时?谁说它坏了?你的档案是什么?你是怎么把它分成几页的?实际上它不应该覆盖<如果文件已经存在,code>CreateNew将抛出异常,因此OP的代码应该抛出而不是覆盖。是的,这是真的,但OP没有说它没有抛出异常,他只是说“它不工作”,当我试图打开文件并查看时,它说它“已损坏”如果没有抛出任何异常,我如何确定此代码是否正确重建了文件?当我尝试打开文件并查看时,它会说它“已损坏”,如果没有抛出任何异常,我如何确定此代码是否正确重建了文件?@nlstack01:在何处打开文件?被破坏可能是一个问题,你如何削减文件在第一位,并试图重建它。我们没有足够的上下文来进行真正的推测。当我写文件的时候,我不需要更改偏移量吗?或者这无关紧要?在我的电脑里总是0code@nlstack01:从我上面引用的内容:查找到文件末尾