我删除一个txt文件,正由另一进程使用,因此该进程无法访问该文件

generhappy 2012-05-30 09:20:38
我的全部代码如下,在线等,求大侠指点啊!!

string Book_Code = Request["Book_Code"].ToString();
string image_full_name = Request["image_full_name"].ToString();
string image_name = image_full_name.Substring(0, image_full_name.IndexOf(@"."));


string path = Server.MapPath("../../Books_Data/" + Book_Code + "/");


string txt = TextBox1.Text;
txt = txt.Replace("'","''");
System.IO.File.Delete(Server.MapPath("../../Books_Data/" + Book_Code + "/" + image_name + ".txt"));//这句报错
System.IO.StreamWriter swobj = System.IO.File.AppendText(path+ "/" + image_name+".txt");
swobj.WriteLine(txt);
swobj.Flush();
swobj.Dispose();
swobj.Close();
...全文
494 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSharpProgrammer 2012-05-30
  • 打赏
  • 举报
回复
楼主,你应该首先确认访问这个文件的功能代码有多少,然后再仔细检查在执行DELETE 操作的时候,执行逻辑,看看是否在DELETE 与访问文件操作是否有时间上的冲突。
另外你打开文件,读取文件的时候,如果使用FileStream,实际上是可以有几种访问模式的:

如果要别的应用程序在它打开该文件的时候也能修改该文件,则需要指定模式为ReadWrite:
string sFileName = @"C:\Exchange.dat";
FileStream fs = new FileStream(sFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
System.IO.StreamReader file = new System.IO.StreamReader(fs);
string sTxt = file.ReadLine();
file.Close();

这里的共享方式FileShare,是指授予其它应用程序在操作该文件时所具有的权限。取值有None、Read、Write、ReadWrite等。

None:谢绝共享当前文件。文件关闭前,打开该文件的任何请求(由此进程或另一进程发出的请求)都将失败。

Read:允许随后打开文件读取。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取的请求(由此进程或另一进程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。

ReadWrite:允许随后打开文件读取或写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。

Write:允许随后打开文件写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行写入的请求(由此进程或另一进过程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。

感觉Write、None的效果一样,都不能读和写。文件都不能打开,授予写的权限有何用!所以FileShare.None、FileShare.Write的时候,别的应用程序打开文件的时候没权限。

阿非 2012-05-30
  • 打赏
  • 举报
回复
System.IO.File.Delete(Server.MapPath("../../Books_Data/" + Book_Code + "/" + image_name + ".txt"));//这句报错


如果是这句报错就说明别的地方在使用该文件,应先释放资源
QIFU 2012-05-30
  • 打赏
  • 举报
回复
try catch还是发掉了。再发一下

try
{
System.IO.File.Delete(filename);//这句报错
}
catch(Exception e){ //异常处理}
QIFU 2012-05-30
  • 打赏
  • 举报
回复
刚有一个地方写错了,重发一下:

string Book_Code = Request["Book_Code"].ToString();
string image_full_name = Request["image_full_name"].ToString();
string image_name = image_full_name.Substring(0, image_full_name.IndexOf(@"."));


string path = Server.MapPath("../../Books_Data/" + Book_Code + "/");


string txt = TextBox1.Text;
txt = txt.Replace("'", "''");

//-----------------------
string filename = Server.MapPath("../../Books_Data/" + Book_Code + "/" + image_name + ".txt");
if (System.IO.File.Exists(filename)) //一般删除文件要判断文件是否存在,如果不存在当然删除不了
{
System.IO.File.Delete(filename);//这句报错
}
/*
//如果可能有多个用户同时访问,还要考虑进程同步如下:
//先定义全局变量lockFile
private static readonly object lockFile = new object();//全局变量
lock (lockFile)
{
string filename = Server.MapPath("../../Books_Data/" + Book_Code + "/" + image_name + ".txt");
if (System.IO.File.Exists(filename)) //一般删除文件要判断文件是否存在,如果不存在当然删除不了
{
try
{
System.IO.File.Delete(filename);//这句报错
}
}
}
* */
//------------------------

System.IO.StreamWriter swobj = System.IO.File.AppendText(path + "/" + image_name + ".txt");
swobj.WriteLine(txt);
swobj.Flush();
swobj.Dispose();
swobj.Close();
QIFU 2012-05-30
  • 打赏
  • 举报
回复
string Book_Code = Request["Book_Code"].ToString();
string image_full_name = Request["image_full_name"].ToString();
string image_name = image_full_name.Substring(0, image_full_name.IndexOf(@"."));


string path = Server.MapPath("../../Books_Data/" + Book_Code + "/");


string txt = TextBox1.Text;
txt = txt.Replace("'", "''");

//-----------------------
string filename = Server.MapPath("../../Books_Data/" + Book_Code + "/" + image_name + ".txt");
if (System.IO.File.Exists(filename)) //一般删除文件要判断文件是否存在,如果不存在当然删除不了
{
System.IO.File.Delete(filename);//这句报错
}
/*
//如果可能有多个用户同时访问,还要考虑进程同步如下:
//先定义全局变量lockFile
private static readonly object lockLogFile = new object();//全局变量
lock (lockFile)
{
string filename = Server.MapPath("../../Books_Data/" + Book_Code + "/" + image_name + ".txt");
if (System.IO.File.Exists(filename)) //一般删除文件要判断文件是否存在,如果不存在当然删除不了
{
try
{
System.IO.File.Delete(filename);//这句报错
}
}
}
* */
//------------------------

System.IO.StreamWriter swobj = System.IO.File.AppendText(path + "/" + image_name + ".txt");
swobj.WriteLine(txt);
swobj.Flush();
swobj.Dispose();
swobj.Close();
generhappy 2012-05-30
  • 打赏
  • 举报
回复
在我这个上面,应该怎么改啊,在线坐等啊!!
糊涂浩浩 2012-05-30
  • 打赏
  • 举报
回复
File.Exists(Path.Combine("目的目录", file.Name)) 判断文件状态
xuan.ye 2012-05-30
  • 打赏
  • 举报
回复
System.IO.StreamWriter swobj = System.IO.File.AppendText(path+ "/" + image_name+".txt");



//上面都删除了,这块还追加,肯定不行啊,你应该创建吧?
generhappy 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

System.IO.File.Delete(Server.MapPath("../../Books_Data/" + Book_Code + "/" + image_name +
把这句话写到 swobj.Close();这个后面,先释放,再删除
[/Quote]

不是,这个是修改这个txt的功能,我就先删除这个txt,然后再保存一个新的,必须先删除啊!
licai1210 2012-05-30
  • 打赏
  • 举报
回复
System.IO.File.Delete(Server.MapPath("../../Books_Data/" + Book_Code + "/" + image_name +
把这句话写到 swobj.Close();这个后面,先释放,再删除
generhappy 2012-05-30
  • 打赏
  • 举报
回复
具体应该怎么做啊?
baysos 2012-05-30
  • 打赏
  • 举报
回复
判断文件当期状态~返回相关提示。
1. 内容概要 本项目是一个支持科学函数的命令行计算器,兼容 C++98 标准。它实现了中缀表达式词法分析、后缀表达式转换与求值,支持常见数学运算(如幂、三角函数、对数等)与括号优先级解析。程序还提供了角度版三角函数、角度与弧度互转功能,并支持函数调试输出与函数演示模式。 2. 适用人群 * C++ 初中级学习者,特别是希望深入理解表达式求值机制者 * 需要一个可扩展的计算引擎的项目开发者 * 想通过项目实践词法分析、调度场算法、数学函数封装的开发者 * 高校学生课程设计、编译原理实践者 3. 使用场景及目标 * 实现中缀表达式的完整求解器,支持函数嵌套、优先级与结合性处理 * 提供角度与弧度版本的三角函数,以适应不同输入偏好 * 演示中缀转后缀过程,辅助编程教育与算法教学 * 提供科学函数辅助计算,如 `log`, `sqrt`, `abs`, `exp`, `ceil`, `floor` 等 4. 其他说明 * 支持函数:sin, cos, tan(弧度);sind, cosd, tand(角度) * 支持函数嵌套,如 `sin(deg2rad(30))` * 支持操作符:+, -, \*, /, ^, \*\*(幂运算)与括号优先级 * 所有函数均通过 map 注册,方便扩展与自定义 * 输入 `help` 查看支持函数,`demo` 观看转后缀过程,`quit` 退出程序 * 提示用户避免使用 `°` 符号,推荐使用角度函数代替 * 可通过 `g++ calculator.cpp -o calculator -lm` 编译(需链接数学库)
项目工程资源经过测试运行,功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会努力及时为您解惑,提供帮助 【资源内容】:包含源码、工程文件等。资源质量优质,放心下载使用!可参考实现复现;设计报告也可借鉴此项目工程;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途,网络商品/电子资源资料具可复制性不支持退款。质量优质,放心下载使用

62,241

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧