C# 流不可读错误
此代码(chunk.feeddata)返回流不可读错误。我不知道为什么会这样。文件拥有所有权限。有没有办法解决这个问题。欢迎所有建议。代码只是尝试将第一个文件复制到输出文件,然后将下一个文件追加到输出文件的末尾C# 流不可读错误,c#,asp.net,ms-word,openxml,C#,Asp.net,Ms Word,Openxml,此代码(chunk.feeddata)返回流不可读错误。我不知道为什么会这样。文件拥有所有权限。有没有办法解决这个问题。欢迎所有建议。代码只是尝试将第一个文件复制到输出文件,然后将下一个文件追加到输出文件的末尾 public void Merge() { try { string Temps = Server.MapPath(...); //create folder if (!Directory.Exists(Temps))
public void Merge()
{
try
{
string Temps = Server.MapPath(...); //create folder
if (!Directory.Exists(Temps))
{
Directory.CreateDirectory(Temps);
}
string output = Path.Combine(Temps + ....+ ".doc");
string sid = Request.QueryString["id"];
string stud = sid.ToString();
string ds = HttpContext.Current.Request.MapPath(......);
DirectoryInfo dinfo = new DirectoryInfo(ds);
DirectorySecurity dSecurity = dinfo.GetAccessControl();
dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
dinfo.SetAccessControl(dSecurity);
if (Directory.Exists(ds))
{
DirectoryInfo d = new DirectoryInfo(ds);
FileInfo[] Files = d.GetFiles("*" + stud + "*.docx");
string[] filepaths = new string[Files.Length];
int index = 0;
foreach (FileInfo file in Files)
{
filepaths[index] = file.FullName;
index++;
}
File.Delete(output);
File.Copy(filepaths[0], output);
for (int i = 1; i < filepaths.Length; i++)
{
using (WordprocessingDocument myDoc = WordprocessingDocument.Open(output, true))
{
string altChunkId = "AltChunkId1_" + i;
MainDocumentPart mainPart = myDoc.MainDocumentPart;
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altChunkId);
FileStream fileStream = File.Open(@filepaths[i], FileMode.Append);
{
chunk.FeedData(fileStream);
}
DocumentFormat.OpenXml.Wordprocessing.AltChunk altChunk = new DocumentFormat.OpenXml.Wordprocessing.AltChunk();
altChunk.Id = altChunkId;
mainPart.Document
.Body
.InsertAfter(altChunk, mainPart.Document.Body
.Elements<DocumentFormat.OpenXml.Wordprocessing.Paragraph>().Last());
mainPart.Document.Save();
if(fileStream!=null)
fileStream.Dispose();
}
}
}
}
catch (Exception ex)
{
}
}
public void Merge()
{
尝试
{
字符串Temps=Server.MapPath(…);//创建文件夹
如果(!Directory.Exists(Temps))
{
创建目录(Temps);
}
字符串输出=Path.Combine(Temps+..+.doc);
字符串sid=Request.QueryString[“id”];
字符串螺柱=sid.ToString();
字符串ds=HttpContext.Current.Request.MapPath(……);
DirectoryInfo dinfo=新的DirectoryInfo(ds);
DirectorySecurity dSecurity=dinfo.GetAccessControl();
dSecurity.AddAccessRule(新的FileSystemAccessRule(新的SecurityIdentifier(WellKnownSidType.WorldSid,null),FileSystemRights.FullControl,InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,PropagateInherit,AccessControlType.Allow));
dinfo.SetAccessControl(数据安全);
if(Directory.Exists(ds))
{
DirectoryInfo d=新的DirectoryInfo(ds);
FileInfo[]Files=d.GetFiles(“*”+stud+“*.docx”);
string[]filepath=新字符串[Files.Length];
int指数=0;
foreach(文件中的文件信息文件)
{
filepath[index]=file.FullName;
索引++;
}
文件删除(输出);
File.Copy(文件路径[0],输出);
for(int i=1;i
我认为所有文件的末尾都有EOF(文件结束)标记。可能这就是没有被追加的原因。你看过这些文章了吗?
嗨,克瓦辛。谢谢你的更新。我们如何解决这个问题。你有什么想法吗?当前代码是否有任何错误/异常?输出是什么?您是否尝试过使用FileMode.Append而不是Open?使用filemode.append时,行chunk.feeddata(filestream)引发异常,即流之前不可读,使用filemode.open时,输出只是第一个文件。第二个文件未附加到EDMM。我不会用这个词。有没有办法将filestream的CanRead属性设置为true?此处为false。无法将canRead属性设置为true,因为它是只读属性。但该值来自文件只读属性。“写入”单击该文件并转到“属性”以检查该文件是只读的还是受保护的。调试时,我们无法从特定文件夹打开该文件,它表示访问被拒绝。”。只有当我们调试时,这是因为当您调试时,您能够看到异常,但是当您运行代码时,您没有编写任何异常处理代码。您将看到异常,而不是使用try-catch块。我尝试了一些代码。但是当我打开新文件时,它说文件已损坏。感谢您的努力。请为整个函数创建一个try-catch块。引发异常的原因是流不可读。这就是为什么我问起canread酒店。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FileAppending
{
class Program
{
static void Main(string[] args)
{
string[] doc1 = File.ReadAllLines("C:\\FileAppending\\FileAppending\\Doc1.Docx");
string[] doc2 = File.ReadAllLines("C:\\FileAppending\\FileAppending\\Doc2.Docx");
File.WriteAllLines("C:\\FileAppending\\FileAppending\\Doc3.Docx", doc1);
File.AppendAllLines("C:\\FileAppending\\FileAppending\\Doc3.Docx", doc2);
}
}
}