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

File.Create() can't be executed because file is still used by another process

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

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

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)

您在此处列出的代码没有任何问题,您需要提供更多信息才能得到答复。

,我创建了一个包含以下 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)
            {

            }
        }
    }
}

当然文件名必须在 "hard coded" 中,但您可以看到代码大体上是相同的,如果将其复制到新的控制台应用程序中,您也会看到它有效。

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

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