注册 登录
编程论坛 C# 论坛

如何关闭已经打开的txt文本

hsktm 发布于 2014-01-22 11:50, 833 次点击
前提:文件在程序运行前是打开的,程序启动后,运行中判断出文本被打开,此时如何关闭?
尝试了类似的操作
  FileStream fs2 = File.Create(@file);//类似的还有很多都不行,报错进程打开(因为文本打开状态)
  fs2.CLose();
file是string格式的路径信息,(文件是程序建立的,关闭程序后我先打开文本,然后我再运行程序)。执行读取等操作的时候会报错,提示进程已经打开。
create 只是这里的一个例子,其他的我也试验了 都会报错
我想加到catch中,通过关闭这个文件,对这个错误进行处理。
2 回复
#2
wp2319572014-01-22 12:46
关键看文件是谁打开的  谁打开谁关闭   你想关闭其他进程打开的文件估计会很难吧
#3
wangnannan2014-01-22 12:57
程序代码:
using using System.Runtime.InteropServices;

[DllImport("kernel32.dll")]
public static extern IntPtr _lopen(string lpPathName, int iReadWrite);

[DllImport("kernel32.dll")]
public static extern bool CloseHandle(IntPtr hObject);

public const int OF_READWRITE = 2;
public const int OF_SHARE_DENY_NONE = 0x40;
public readonly IntPtr HFILE_ERROR = new IntPtr(-1);
private void button1_Click(object sender, EventArgs e)
{
    string vFileName = @"c:\temp\temp.bmp";
    if (!File.Exists(vFileName))
    {
        return;
    }
    IntPtr vHandle = _lopen(vFileName, OF_READWRITE | OF_SHARE_DENY_NONE);
    if (vHandle == HFILE_ERROR)
    {
        //文件被占用
          using (Process p = new Process())
             {
                 p.StartInfo = new ProcessStartInfo("C:\\a.txt");
                 p.Start();
                 p.WaitForExit();
             }
    }
   
    CloseHandle(vHandle);
}
临时写的 没测 你看看这个DEMO 做个参考

[ 本帖最后由 wangnannan 于 2014-1-22 13:00 编辑 ]
1