无法执行File.Create(),因为另一个进程仍在使用该文件

时间:2015-04-11 08:10:00

标签: c# .net system.io.file

我在检查目录是否存在以及文件是否存在后尝试创建文件。

但是当我的程序到达这一行时,我得到的错误是我无法创建该文件,因为它已经被另一个进程使用了​​。 奇怪的是它不应该。 即使文件不存在。

File.Create(Directory.GetCurrentDirectory() + "\\Channels\\" + saveFile).Close()

错误发生在代码的这一部分,catch不包括在内。 我知道我应该使用Using()但这应该也可以。 我不喜欢以这种方式重做这部分,直到它以这种方式工作。

            if (!System.IO.Directory.Exists(System.IO.Directory.GetCurrentDirectory() + "\\Channels"))
            {
                connection.Logger.Log("making " + System.IO.Directory.GetCurrentDirectory() + "\\Channels", false, LogMode.Info);
                System.IO.Directory.CreateDirectory(System.IO.Directory.GetCurrentDirectory() + "\\Channels");
            }

            string saveFile = Program.RemoveForbiddenFileCharacters(this.ChannelName + ".Channel");
            string saveFilePath = System.IO.Directory.GetCurrentDirectory() + "\\Channels\\" + saveFile;

            FileStream fileStream = null;
            StreamWriter streamWriter = null;
            try
            {
                if (File.Exists(Directory.GetCurrentDirectory() + "\\Channels\\" + saveFile))
                {
                    File.Delete(Directory.GetCurrentDirectory() + "\\Channels\\" + saveFile);
                }

                File.Create(Directory.GetCurrentDirectory() + "\\Channels\\" + saveFile).Close();

                streamWriter = new StreamWriter(System.IO.Directory.GetCurrentDirectory() + "\\Channels\\" + saveFile);

                //safe stuff to file
                streamWriter.Close();

            }
            catch (Exception e)

2 个答案:

答案 0 :(得分:1)

此处列出的代码没有任何问题,您需要提供更多答案信息。

I.e。 ,我创建了一个控制台应用程序,它包含以下c#代码,并且执行时没有问题并创建文件:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string saveFile = "test.txt";
            try
            {
                if (File.Exists(Directory.GetCurrentDirectory() + "\\Channels\\" + saveFile))
                {
                    File.Delete(Directory.GetCurrentDirectory() + "\\Channels\\" + saveFile);
                }

                File.Create(Directory.GetCurrentDirectory() + "\\Channels\\" + saveFile).Close();

                StreamWriter streamWriter = new StreamWriter(System.IO.Directory.GetCurrentDirectory() + "\\Channels\\" + saveFile);

                //safe stuff to file
                streamWriter.Close();

            }
            catch (Exception ex)
            {

            }
        }
    }
}

当然文件名必须是“硬编码”,但是您可以看到代码通常是相同的,如果您将其复制到新的控制台应用程序中,您也会看到它的工作原理。

答案 1 :(得分:0)

如果您刚刚删除了该文件,那么操作系统可能会阻止您在几秒钟内创建它,因为它还没有完全删除它。

为什么不打开文件进行写入,而不是删除并重新创建?