首页 新闻 赞助 找找看

当压缩文件不存在时,自动压缩文件,网站未发布测试通过,但发布后错误提示找不到文件

0
悬赏园豆:100 [已解决问题] 解决于 2010-09-05 13:29

//功能是自动检测给定路径是否存在dish.zip压缩文件,如果存在,则判断是否最新,
//如果不是最新,则删除原来的压缩文件,重新压缩,
//如果给定路径不存在dish.zip压缩文件,则进行压缩
//最后用隐藏下载压缩文件
//出现的问题:在未发布网站前,测试没有任何问题。网站生成发布后,错误提示见下面截图。
//程序代码:
public void downLoadZip(string strZipPath, string strZipName)
{
FileStream fs
= new FileStream(strZipPath, FileMode.Open, FileAccess.Read, FileShare.Read);
long byteslength = fs.Length;
byte[] bytes = new byte[(int)byteslength];
fs.Read(bytes,
0, bytes.Length);
fs.Close();
Response.ContentType
= "application/octet-stream";
Response.AppendHeader(
"Content-Length", byteslength.ToString());
Response.AppendHeader(
"Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(strZipName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
#endregion

#region "Page_Load"
protected void Page_Load(object sender, EventArgs e)
{
#region "获取action"
RequestAction
= Request.QueryString["action"];
#endregion

#region "action=download"
if (RequestAction == "download")
{
#region "给压缩文件方法参数 变量赋值"
zipName
= "dish.zip";//客户端保存的文件名
zipPath = MapPath(@"~/dish.zip");//压缩文件保存路径
#endregion



#region "压缩文件存在"
if(File.Exists(zipPath))
{
#region "分别获取压缩文件和HTML最近一次修改的时间"
zipDateTime
= Convert.ToDateTime(new FileInfo(zipPath).CreationTime.ToString());
try
{
htmlDateTime
= Convert.ToDateTime(File.ReadAllText(MapPath(@"/UpdateTime.txt"), Encoding.UTF8).ToString());
}
catch
{
File.WriteAllText(MapPath(
@"~\UpdateTime.txt"), DateTime.Now.ToString(), Encoding.UTF8);
htmlDateTime
= Convert.ToDateTime(File.ReadAllText(MapPath(@"/UpdateTime.txt"), Encoding.UTF8).ToString());
}
#endregion

#region "比较时间,如果压缩文件不是最新的"
if (zipDateTime.CompareTo(htmlDateTime) < 0)
{
File.Delete(zipPath);
myCompression.ZipClass.ZipFileDictory(MapPath(
@"~/HtmlAndImage/"), zipPath, "");
File.SetCreationTime(zipPath, DateTime.Now);
}
#endregion
}
#endregion

#region "压缩文件不存在,压缩HTML文件,设置文件创建时间为now"
else
{
myCompression.ZipClass.ZipFileDictory(MapPath(
@"~/HtmlAndImage/"), zipPath, "");
File.SetCreationTime(zipPath, DateTime.Now);
}
#endregion

#region "下载zip文件"
downLoadZip(zipPath, zipName);
#endregion
}
#endregion

 

问题补充: 如果对应目录手动放上dish.zip文件后,即zip存在,经过测试,可以执行程序中的“//如果不是最新,则删除原来的压缩文件,重新压缩,”这一步。
Aaron Xu的主页 Aaron Xu | 初学一级 | 园豆:100
提问于:2010-08-26 15:32
< >
分享
最佳答案
0

myCompression.ZipClass.ZipFileDictory(MapPath(@"~/HtmlAndImage/"), zipPath, "");

压缩使用的是同步还是异步的呀?

 

如果是同步是没问题的,要是异步就有问题了:

File.Delete(zipPath);
myCompression.ZipClass.ZipFileDictory(MapPath(@"~/HtmlAndImage/"), zipPath, "");
File.SetCreationTime(zipPath, DateTime.Now); //如果文件还没有压完这行是找不到文件的。

 
收获园豆:40
熊哥 | 小虾三级 |园豆:682 | 2010-08-27 11:24
其他回答(2)
0

那一句出的错,是否有相关操作权限。

收获园豆:50
Astar | 园豆:40805 (高人七级) | 2010-08-26 15:37
我给user加满了权限,还是没有用。
支持(0) 反对(0) Aaron Xu | 园豆:100 (初学一级) | 2010-08-26 15:45
@Alon Xu:加上everyone权限试试,是不是不能创建文件。就是文件不存在需要创建的时候。
支持(0) 反对(0) Astar | 园豆:40805 (高人七级) | 2010-08-26 15:50
@Astar:everyone权限加满 也不行。
支持(0) 反对(0) Aaron Xu | 园豆:100 (初学一级) | 2010-08-26 16:48
@Alon Xu:错误是出在哪一句?图可以抓全一点。是一是有些方法执行不同步有问题。
支持(0) 反对(0) Astar | 园豆:40805 (高人七级) | 2010-08-26 16:53
发布后貌似没有提示错误在哪一行的吧?
支持(0) 反对(0) Aaron Xu | 园豆:100 (初学一级) | 2010-08-27 22:01
0

在 File.Delete(zipPath);这句后面先创建该文件

收获园豆:10
HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-08-26 16:10
当zip文件不存在的时候,不会进入File.Delete(zipPath)这个分支。 文件不存在是为了方便zip文件不存在或者被删后重新压缩。
支持(0) 反对(0) Aaron Xu | 园豆:100 (初学一级) | 2010-08-26 16:51
你这个是执行到哪儿、哪一句语句出的错?
支持(0) 反对(0) HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-08-26 17:10
发布前没有任何问题,没有出错。 发布后出错,发布后貌似没有办法知道哪步出的错。
支持(0) 反对(0) Aaron Xu | 园豆:100 (初学一级) | 2010-08-27 22:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册