无法访问文件Username.omg因为它被另一个进程使用

时间:2014-04-07 11:28:28

标签: c# winforms

任何人都可以帮忙吗?我一直收到错误File beeing used by another process

到目前为止,这是我的代码:

string username = textBox1.Text;
string password = textBox2.Text;
string SecurityCode = textBox3.Text;
if(!Directory.Exists(path + "\\Login"))
      Directory.CreateDirectory(path + "\\Login");
if (!File.Exists(path + "\\Login\\Username.omg" + "\\Login\\Password.omg" + "\\Login\\SecurityCode.omg"))
    File.Create(path + "\\Login\\Username.omg");
    File.Create(path + "\\Login\\Password.omg");
    File.Create(path + "\\Login\\SecurityCode.omg");

    File.AppendAllText(path + "\\Login\\Username.omg", username);
    File.AppendAllText(path + "\\Login\\Password.omg", password);
    File.AppendAllText(path + "\\Login\\SecurityCode.omg", SecurityCode);
    MessageBox.Show("User Created: Welcome: " + username);
}

1 个答案:

答案 0 :(得分:2)

File.Create返回您在尝试访问刚创建的文件之前需要关闭的流

    using(File.Create(path + "\\Login\\Username.omg"))
        ;
    using(File.Create(path + "\\Login\\Password.omg"))
        ;
    using(File.Create(path + "\\Login\\SecurityCode.omg"))
        ;

围绕File.Create调用的简单using语句可以帮助关闭和处理返回的流

但是,正如上面Mr Hans Passant的评论中所述,通过简单调用File.WriteAllText()

可以更好地满足您的简单方案
File.WriteAllText(Path.Combine(path, @"login\username.omg"), username);
如果文件不存在,

File.WriteAllText会创建该文件并覆盖其内容(如果存在)。相反,在您的代码中,您将信息一遍又一遍地附加到相同的文件中。 我不确定这是否是你想要的。

顺便说一句,你对File.Exists的调用是错误的。您应该单独测试每个文件

string userNameFile = Path.Combine(path, @"login\username.omg");
if (!File.Exists(userNameFile)
{
    using(File.Create(userNameFile))
       ;
}