测试区的web.config没有配置requestLengthDiskThreshold,正式区好像也没有,但是在
正式区上传附件报“Cannot access a closed file”,请问怎么解决?
if (fupFile.PostedFile != null && fupFile.PostedFile.ContentLength > 0)
{
if (fupFile.HasFile)
{
ListItem item = new ListItem();
item.Value = item.Text = fupFile.PostedFile.FileName;
if (!lbxFile.Items.Contains(item))
{
lbxFile.Items.Add(item);
files.Add(fupFile);
}
}
if (files.Count > 0)
{
string WF_NO;
string WF_Sale;
string filename = "";
string path = "d:\\Lorom\\ProductCenter\\WorkFlow\\FTPFile\\" + Session["wf_sale"].ToString() + "\\" + Session["WF_NO"].ToString() + "\\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
lblShow.Text = fupFile.PostedFile.FileName;
WF_Sale = Session["UserNO"].ToString();
WF_NO = Session["WF_NO"].ToString();
WCFHelperBase wcfBase = new WCFHelperBase();
foreach (FileUpload fup in files)
{
if (fup.HasFile)
filename = fup.FileName;
//string extend = Path.GetExtension(filename);
// fupFile.PostedFile.SaveAs(Server.MapPath(path)+"\\"+filename);
// Directory.CreateDirectory(path);
//myFile.SaveAs(path + fupFile);
wcfBase.csHelper.GetUnsignFile(WF_NO, filename, WF_Sale);
fup.SaveAs(path + "/" + fup.FileName);//无法访问已关闭的文件
}
//Page.ClientScript.RegisterClientScriptBlock(typeof(string), "", @"<script>alert('上传成功!')</script>");
wcfBase.CloseWCF();
Response.AddHeader("Refresh", "0");
}
}
<System.Web>
<httpRuntime executionTimeout="90" maxRequestLength="20000" useFullyQualifiedRedirectUrl="false" requestLengthDiskThreshold="8192"/>
</System.Web>
先刷新,再关闭,顺序别错。
writer.Flush();
fileStream.Flush();
writer.Close();
fileStream.Close();
判断下是不是 输出流没关闭。
很久没有写文件操作的方法了,记得之前写过一个类库是关于文件操作的,今天翻出来一看居然没有文件写入操作,于是临时加了一个(期间还询问了一下度娘,年纪大了,脑子不好使了)。
写完后发现报一个错误:cannot access a closed file,神马情况?第一反应是文件关闭了,没有读取到,但是印象中filestream不用显式打开的啊,后来懒得想了,debug一下最快捷了
于是,问题总算发现了,代码如下:
///
/// 向文件中写入信息(文件不存在会创建文件)
///
/// 文件内容
/// 写入的字节数
public static int WriteFile(string filePath,string fileContent)
{
FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate);
StreamWriter writer = new StreamWriter(fileStream);
writer.WriteLine(fileContent);
writer.Flush();
writer.Close();
fileStream.Flush();
fileStream.Close();
return fileContent.Length;
}
关闭对象的顺序不对
writer.close()执行后
fileStream.Flush()再执行,这个时候文件应该关闭了,怎么可能写入呢?于是调整代码顺序,问题解决;
///
/// 向文件中写入信息(文件不存在会创建文件)
///
/// 文件内容
/// 写入的字节数
public static int WriteFile(string filePath,string fileContent)
{
FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate);
StreamWriter writer = new StreamWriter(fileStream);
writer.WriteLine(fileContent);
writer.Flush();
fileStream.Flush();
writer.Close();
fileStream.Close();
return fileContent.Length;
}