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 可能会阻止您在几秒钟内创建它,因为它还没有完全删除它。
为什么不直接打开文件进行写入,而是删除并重新创建呢?
我在检查目录是否存在后尝试创建文件,文件是否存在。
但是,当我的程序执行到这一行时,我得到了无法创建文件的错误,因为它已被另一个进程使用。 奇怪的是它不应该。 即使文件不存在。
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 可能会阻止您在几秒钟内创建它,因为它还没有完全删除它。
为什么不直接打开文件进行写入,而是删除并重新创建呢?