0

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

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

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)
4

2 回答 2

1

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

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

            }
        }
    }
}

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

于 2015-04-11T08:22:08.023 回答
0

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

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

于 2015-04-11T08:22:28.357 回答