我删除一个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();
...全文
440 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
  • 打赏
  • 举报
回复
判断文件当期状态~返回相关提示。

62,074

社区成员

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

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

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

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