如何清除文本文件内容c#

如何清除文本文件内容c#,c#,streamwriter,C#,Streamwriter,我想用这个方法清除文本文件内容 private void writeTextFile(string filePath, string text) { if (!File.Exists(filePath)) { File.Create(filePath).Close(); } using (StreamWriter tw = new StreamWriter(filePath)) { File.WriteAllText(fi

我想用这个方法清除文本文件内容

private void writeTextFile(string filePath, string text)
{
    if (!File.Exists(filePath))
    {
        File.Create(filePath).Close();

    }
    using (StreamWriter tw = new StreamWriter(filePath))
    {
        File.WriteAllText(filePath,"");
        tw.WriteLine(text);
        tw.Close();
    }
}
但是我得到了这个错误

The process cannot access the file  because it is being used by another process.
但这在任何地方都不会开放

请帮帮我
谢谢

这是因为您正在创建一个
StreamWriter
,然后使用
File.WriteAllText
。您的文件已被
StreamWriter
访问

File.WriteAllText
就是这样做的,将传递给它的整个字符串写入一个文件<如果要使用
File.writeralText
,则不需要代码>StreamWriter

如果不关心覆盖现有文件,可以执行以下操作:

private void writeTextFile(string filePath, string text)
{
    File.WriteAllText(filePath, text);
}
如果要使用
StreamWriter
(顺便说一句,
File.writealText
使用它,它只是隐藏它),并将其附加到文件中,您可以(从):


问题在于,您通过将
StreamWriter
初始化到
filePath
上,然后尝试调用
file.WriteAllText
来锁定文件,这也会在内部尝试锁定文件,最终引发异常

从外观上看,您正在尝试清除文件内容,然后写入内容。
考虑以下事项:

private void writeTextFile(string filePath, string text) {
    using (StreamWriter tw = new StreamWriter(filePath, false))  //second parameter is `Append` and false means override content            
        tw.WriteLine(text);

}

您可以使用
StreamWriter
创建要写入的文件,并使用
Truncate
在清除先前内容的情况下写入

StreamWriter writeFile;
writeFile = new StreamWriter(new IsolatedStorageFileStream(filename, FileMode.Truncate, myIsolatedStorage));
writeFile.WriteLine("String");
writeFile.Close();
这将使用
FileMode.Truncate

Truncate
指定打开现有文件,然后将其截断,使其大小为零字节


假设您的文件已经存在,并且您希望在填充它之前清除其内容,我发现使用StreamWriter执行此操作的最佳方法是

// this line does not create test.txt file, assuming that it already exists, it will remove the contents of test.txt 
Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(Path.GetFullPath(C:\test.txt), False)

// this line will now be inserted into your test.txt file
sw.Write("hey there!")

您只需要在StreamWriter的构造函数的第二个参数中指定false(路由,false

String ruta=@“C:\Address\YourFile.txt”;
使用(StreamWriter文件=新StreamWriter(ruta,false))
{
对于(int i=0;i
为什么不将
FileStream
FileMode一起使用。创建

using (var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
    //Do something...
}
请看

创建
指定操作系统应创建新文件如果文件已存在,则将覆盖该文件。这需要写入权限。FileMode.create相当于请求如果文件不存在,则使用CreateNew;否则,使用Truncate。如果文件已存在但为隐藏文件,则引发UnauthorizedAccessException异常

覆盖将覆盖/删除/清除/删除所有现有文件数据。

如果要使用
StreamWriter
,请使用
新StreamWriter(fs)

或者,此时只需完全删除该方法,并让调用方直接调用
文件。WriteAllText
,因为该方法无法完成任何工作。@Servy yup!我只是使用现有模板。我认为第二个参数不是append,而是encoding。有两个构造函数,一个以encoding作为第二个构造函数param和另一个以布尔值作为第二个参数的参数。
// I decided to use this solution
// this section is to clear MyFile.txt
     using(StreamWriter sw = new StreamWriter(@"MyPath\MyFile.txt", false))
     {
       foreach(string line in listofnames)
       {
          sw.Write(""); // change WriteLine with Write
       }
        sw.Close();
      }
    // and this section is to copy file names to MyFile.txt
        using(StreamWriter file = new StreamWriter(@"MyPath\MyFile.txt", true))
        {
        foreach(string line in listofnames)
        {
            file.WriteLine(line);
        }
      }
String ruta = @"C:\Address\YourFile".txt";

using (StreamWriter file = new StreamWriter(ruta, false))
{
     for ( int i = 0; i < settings.Length; ++i )
         file.WriteLine( settings[ i ] );

     file.Close();
}
using (var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
    //Do something...
}