我正在用C#编写一个需要重复访问1个图像文件的程序.大部分时间它都可以工作,但如果我的计算机运行速度很快,它会在将文件保存回文件系统之前尝试访问该文件并抛出错误:"另一个进程正在使用的文件".
我想找到解决这个问题的方法,但是我所有的谷歌搜索都只是通过使用异常处理来创建检查.这违背了我的宗教信仰,所以我想知道是否有人有更好的方法呢?
我正在尝试读取*.csv文件.
所述*.csv-file包括由分号分隔的两列的(" ; ").
我能够*.csv使用StreamReader 读取-file,并能够使用该Split()函数分隔每一行.我想将每列存储到一个单独的数组中然后显示它.
有可能吗?
如果我有以下情况:
StreamWriter MySW = null;
try
{
Stream MyStream = new FileStream("asdf.txt");
MySW = new StreamWriter(MyStream);
MySW.Write("blah");
}
finally
{
if (MySW != null)
{
MySW.Flush();
MySW.Close();
MySW.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
MySW.Dispose()即使提供了,我可以打电话并跳过关闭吗?是否存在任何不能按预期工作的Stream implament(如CryptoStream)?
如果没有,那么以下只是错误的代码:
using (StreamWriter MySW = new StreamWriter(MyStream))
{
MySW.Write("Blah");
}
Run Code Online (Sandbox Code Playgroud) 我对我的编程知识感到非常沮丧,但我们真的需要处理 FileStream Object 吗?
我问的原因是因为代码在 100 种情况下抛出“另一个进程正在使用的文件”异常,并且有一段时间好像我再次尝试(使用文件流下载文件)它工作正常。
代码请参考这个问题。
由于它只发生在 100 次左右,这让我很困惑,而且它发生在生产服务器上,所以根本无法调试,但在我的开发机器上运行良好......
如果我有这个:
StreamWriter cout = new StreamWriter("test.txt");
cout.WriteLine("XXX");
// here IOException...
StreamReader cin = new StreamReader("test.txt");
string text = cin.ReadLine();
Run Code Online (Sandbox Code Playgroud)
clr扔了一个IOException因为我没有关闭cout.
事实上,如果我这样做:
StreamWriter cout = new StreamWriter("test.txt");
cout.WriteLine("XXX");
cout.Close();
StreamReader cin = new StreamReader("test.txt");
string text = cin.ReadLine();
Run Code Online (Sandbox Code Playgroud)
我也不例外.
但是如果我这样做然后退出应用程序:
StreamReader cin = new StreamReader("test.txt");
string text = cin.ReadLine();
Run Code Online (Sandbox Code Playgroud)
无需关闭cin文件即可从OS打开和写入.
但是,阅读StreamReader.cs我的源代码并没有'找到析构函数方法(即~StreamReader(...)).那么如果垃圾收集器没有调用Dispose并且没有终结方法,谁会释放该文件?
我尝试用一些额外的方法和属性"包装"一个StreamReader类Fichier.
我想要两件事:
StreamReader在自动打开Fichier类;StreamReader当我们使用overrided方法打开ReadLine,而不是之前(我们需要有阅读它之前修改文件StreamReader).我的一段代码看起来像这样:
public string ReadLine()
{
if (Reader == null || ???)
{
Reader = new StreamReader(Path);
}
return Reader.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
在???,我想检查StreamReader是否已关闭.的确,如果我们这样做:
StreamReader sr = new StreamReader(path);
sr.Close();
Run Code Online (Sandbox Code Playgroud)
sr 不是null,但如何检查它是否已关闭,以及如何重新打开它?
如果你想知道我为什么需要打开和关闭StreamReader,那是因为Fichier对象需要随时存在,但是它所代表的文件需要在外部程序中多次修改.
我一直试图写这个以便列出我的文件夹,附加部分不起作用,它重写了整个内容,如果我在不退出应用程序的情况下尝试列出其他内容,它也会给出“文件正在使用中“对我来说没有意义的错误,因为我在每个循环结束时都使用了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, …Run Code Online (Sandbox Code Playgroud)