首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试使用最近创建的文件后,程序崩溃。C#

尝试使用最近创建的文件后,程序崩溃。C#
EN

Stack Overflow用户
提问于 2010-05-26 23:04:40
回答 4查看 399关注 0票数 3

下面是我的代码

代码语言:javascript
运行
复制
if (!File.Exists(pathName))
{
    File.Create(pathName);
}
StreamWriter outputFile = new StreamWriter(pathName,true);

但是每当我第一次运行程序时,文件的路径就会被创建。但是,一旦我到达StreamWriter行,我的程序就崩溃了,因为它说我的fie正被另一个进程使用。在File.Create和StreamWriter语句之间是否遗漏了什么?

EN

回答 4

Stack Overflow用户

发布于 2010-05-26 23:08:20

File.Create不只是创建文件--它还会打开文件进行读写。因此,当您尝试通过自己的进程创建StreamWriter时,该文件实际上已经在使用了。

如果pathName指定的文件不存在,StreamWriter将创建该文件,因此您可以简单地删除File.Exists检查并简化您的代码:

代码语言:javascript
运行
复制
using (var writer = new StreamWriter(pathName, true))
{
   // ...
}

来自MSDN

StreamWriter构造函数(流)

初始化指定文件的StreamWriter类的新实例...如果该文件存在,则可以覆盖或追加该文件。如果该文件不存在,此构造函数将创建一个新文件。

票数 6
EN

Stack Overflow用户

发布于 2010-05-26 23:12:05

正如其他人所提到的,File.Create正在创建一个FileWriter来打开您的文件。但除此之外,在尝试打开文件之前,没有理由检查文件是否存在。只要告诉File.Open打开一个现有的文件:

代码语言:javascript
运行
复制
var outputFile = new StreamWriter(File.Open(pathName, FileMode.OpenOrCreate));
票数 2
EN

Stack Overflow用户

发布于 2010-05-26 23:07:10

在File.Create之后,流仍然是打开的。

您可以使用:

代码语言:javascript
运行
复制
File.Create(pathName).Close();

这将创建该文件并直接将其关闭。

更被接受的是:

代码语言:javascript
运行
复制
using (var file = File.Create(pathName)) {
   // use the file here
   // it will be closed when leaving the using block
}

还有:为什么你要创建一个文件,在你的代码中再创建两行?如果文件不存在,StreamWriter constructor (带有append=true)将创建或追加该文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2914147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档