我一直试图写这个以便列出我的文件夹,附加部分不起作用,它重写了整个内容,如果我在不退出应用程序的情况下尝试列出其他内容,它也会给出“文件正在使用中“对我来说没有意义的错误,因为我在每个循环结束时都使用了close()。
我已经在这里检查了几乎所有的Microsoft文档和许多帖子,但找不到我的答案。
在此先多谢!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace Anime_Lister
{
public partial class Anime0Lister : Form
{
public void Appen()
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(path0save.Text, true))
{
DirectoryInfo directory = new DirectoryInfo(path0tb.Text);
DirectoryInfo[] directory0Arr = directory.GetDirectories();
foreach (DirectoryInfo dir in directory0Arr)
{
String Parent = Convert.ToString(dir.Parent);
String Name = Convert.ToString(dir.Name);
String Root = Convert.ToString(dir.Root);
File.AppendAllText(path0save.Text, Parent);
File.AppendAllText(path0save.Text, " || ");
File.AppendAllText(path0save.Text, Name + System.Environment.NewLine);
File.AppendAllText(path0save.Text, Root + System.Environment.NewLine);
}
}
}
public void Writer()
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(path0save.Text))
{
DirectoryInfo directory = new DirectoryInfo(path0tb.Text);
DirectoryInfo[] directory0Arr = directory.GetDirectories();
foreach (DirectoryInfo dir in directory0Arr)
{
String Parent = Convert.ToString(dir.Parent);
String Name = Convert.ToString(dir.Name);
String Root = Convert.ToString(dir.Root);
file.Write(Parent);
file.Write(" || ");
file.WriteLine(Name);
file.WriteLine(Root);
}
}
}
public void Browser()
{
FolderBrowserDialog address = new FolderBrowserDialog();
if (address.ShowDialog() == System.Windows.Forms.DialogResult.OK)
path0tb.Text = address.SelectedPath;
}
public void Browser2()
{
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
path0save.Text = saveFileDialog1.FileName;
}
}
public Anime0Lister()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//_____________________________________________________________List
{
try
{
if (existing0file.Checked == true)
{
Appen();
}
else
{
Writer();
}
}
catch (Exception Fail)
{
MessageBox.Show(Fail.Message);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
StreamWriter应该始终将一个诸如a之类的可抛弃对象括在Using语句中,以确保即使在异常情况下,该对象也已关闭并且其不受管资源被释放以供重用。该语言为您提供了一个特定的声明(使用Stetement),但是,在您的特定情况下,如果您使用a打开文件,StreamWriter则您将无法使用,File.AppendAllText因为此方法会尝试自行打开文件并找到它在使用中由之前打开的StreamWriter
public void Appen()
{
using(System.IO.StreamWriter file = new System.IO.StreamWriter(path0save.Text, true))
{
DirectoryInfo directory = new DirectoryInfo(path0tb.Text);
DirectoryInfo[] directory0Arr = directory.GetDirectories();
foreach (DirectoryInfo dir in directory0Arr)
{
// No need for those Convert.ToString.
// The DirectoryInfo properties used are already strings.
file.Write(dir.Parent);
file.Write(" || ");
file.WriteLine(dir.Name);
file.WriteLine(dir.Root);
// or just in one line
//file.WriteLine(string.Concat(dir.Parent,
// " || ",
// dir.Name,
// Environment.NewLine,
// dir.Root));
}
}
}
Run Code Online (Sandbox Code Playgroud)
相同的using语句应应用于Writer方法...
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |