Tag: ioexception

FileMode和FileAccess和IOException:进程无法访问文件’filename’,因为它正由另一个进程使用

我有一个应用程序A,它生成一个用于跟踪的文本文件。 同时,应用程序B需要读取相同的文本文件并附加到邮件消息中。 但是当应用程序B尝试读取文本文件时,我收到以下错误: IOException:进程无法访问文件’filename’,因为它正由另一个进程使用 有什么建议 ? 也许更好地用于FileMode和FileAccess? 申请A. if (File.Exists(nFile2)) File.Delete(nFile2); traceFile2 = File.Open(nFile2, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); if (traceFile2 != null) { var twt2 = new TextWriterTraceListener(traceFile2); // http://www.helixoft.com/blog/archives/20 try { if (twt2.Writer is StreamWriter) { (twt2.Writer as StreamWriter).AutoFlush = true; } } catch { } var indiceTraceFile2 = Trace.Listeners.Add(twt2); System.Diagnostics.Trace.WriteLine(“INICIO: ” + DateTime.Now.ToString()); 申请B. […]

动态编译代码时发生IOException

我有以下代码行: CSharpCodeProvider c = new CSharpCodeProvider(); CompilerParameters cp = new CompilerParameters(); cp.ReferencedAssemblies.Add(“system.dll”); cp.CompilerOptions = “/t:library”; cp.GenerateInMemory = true; CompilerResults cr = c.CompileAssemblyFromSource(cp, sb.ToString()); 这会导致抛出IOException 。 附加信息:进程无法访问文件’C:\ Users \ Username \ AppData \ Local \ Temp \ _dgl5fb1i.err’,因为它正由另一个进程使用。 但是,这是耗费超过8GB RAM的大型程序的一部分。 在具有16GB RAM的系统上,不会抛出此exception。 动态编译的代码编译好并运行。 程序在具有足够RAM的系统上运行时没有任何错误。 该程序是为x64编译的。 请注意,我没有收到OutOfMemoryException或任何迹象表明程序内存不足。 在任务管理器中,内存使用率几乎在抛出IOException之前到达顶部。 什么可能导致这种行为,任何人都可以提出解决方案? 编辑 我修改了应用程序以使用更少的内存。 即使应用程序有足够的可用内存,错误仍然存​​在。 问题仍然只发生在一台机器上。 这可能与以下post有关: 阻止CompileAssemblyFromSource生成具有重复文件名的临时文件 。

System.IO.IOException:’进程无法访问文件’@ .txt’,因为它正被另一个进程使用。

我是编程新手,我有一个问题。 如果我有两个函数,一个创建一个文本文件并写入其中,而另一个打开相同的文本文件并从中读取。 我得到的错误是: System.IO.IOException:’进程无法访问文件’@ .txt’,因为它正被另一个进程使用。 我已经尝试为每个function设置单独的计时器,但它仍然无效。 我认为最好的方法是函数2在函数1结束之前不会启动。 你能帮助我实现这个目标吗? 非常感谢你! 麦克风 源代码: public Form1() { InitializeComponent(); System.Timers.Timer timerButtona1 = new System.Timers.Timer(); timerButtona1.Elapsed += new ElapsedEventHandler(tickTimera1); timerButtona1.Interval = 3003; timerButtona1.Enabled = true; } private async void tickTimera1(object source, ElapsedEventArgs e) { function1(); function2(); } void function1() { List linki = new List(); linki.Add(“https://link1.net/”); linki.Add(“https://link2.net/”); linki.Add(“https://link3.net/”); List fileNames […]

File.Move和File.Copy给出IOException登录失败

我正在为C#中的fujitsu扫描器编写一个加载项。 文档被扫描到本地目录,我想将它们复制到网络上的pc。 我一直收到System.IO.IOException:登录失败:虽然未知用户名或密码错误。 我尝试将它们复制到公共目录(至少我认为是公共目录),我仍然得到相同的结果。 对于我可以尝试的东西的任何想法? 我认为这里的代码不是问题,但无论如何它都在这里。 private bool moveTheFile(String source, String destination) { System.DirectoryServices.DirectoryEntry dntry = null; try { //System.IO.File.Move(source, destination); System.IO.File.Copy(source, destination); System.IO.File.Delete(source); if (System.IO.File.Exists(destination)) { return true; } else { return false; } } catch (Exception err) { _host.WriteSystemLog(LogType.Information, “E1000099”, “File.Move Error ” + err.ToString()); return false; } }

SerialPort.Open()抛出IOException – 没有足够的系统资源来完成所请求的服务

我有一个.NET 4 Windows服务,我写的是定期(通常每天一次)通过串口与外部设备通信。 总而言之,这项服务非常有用,但对于一个客户, SerialPort.Open()调用SerialPort.Open()会引发以下exception: System.IO.IOException:存在不足的系统资源来完成所请求的服务。 在System.IO.Ports.InternalResources.WinIOError(Int32 errorCode,String str) at System.IO.Ports.SerialStream..ctor(String portName,Int32 baudRate,奇偶校验,Int32 dataBits,StopBits stopBits,Int32 readTimeout,Int32 writeTimeout,握手握手,Boolean dtrEnable,Boolean rtsEnable,Boolean discardNull,Byte parityReplace) 在System.IO.Ports.SerialPort.Open() 基于exception,会认为服务器资源不足,但似乎并非如此。 CPU或多或少是空闲的,并且有足够的内存和磁盘。 有很多网上提到的SerialPort.Open()抛出其他IOExceptions,我已经实现了Zach Saw的SerialPortFixer ,但它似乎修复了一个不同的问题。 这是我正在做的事情的一个例子(大大简化)。 此类的几个实例(使用不同的串行端口名称)始终在内存中,然后每个实例大约每天调用一次Run()方法。 public class Collector { private SerialPort _port; private string _portName; public void Run() { try { // Run Zach Saw’s IOException workaround SerialPortFixer.Execute(_portName); using (_port = […]

System.IO.File.Delete()/ System.IO.File.Move()有时不起作用

Winforms程序需要将一些运行时信息保存到XML文件中。 该文件有时可能是几百千字节。 在beta测试期间,我们发现一些用户会毫不犹豫地随机终止进程并偶尔导致文件被写入一半并因此被破坏。 因此,我们将算法更改为保存到临时文件,然后删除实际文件并执行移动。 我们的代码目前看起来像.. private void Save() { XmlTextWriter streamWriter = null; try { streamWriter = new XmlTextWriter(xmlTempFilePath, System.Text.Encoding.UTF8); XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyCollection)); xmlSerializer.Serialize(streamWriter, myCollection); if (streamWriter != null) streamWriter.Close(); // Delete the original file System.IO.File.Delete(xmlFilePath); // Do a move over the top of the original file System.IO.File.Move(xmlTempFilePath, xmlFilePath); } catch (System.Exception ex) […]

如何检测现有文件导致的System.IO.IOException?

我想创建并打开一个文件,但前提是它不存在。 我不想使用File.Exists,因为一个线程在创建一个具有相同名称的文件后通过切换。 我如何检查exceptionSystem.IO.IOException是否由文件存在引起? 我不想解析错误消息(即使它可以像.indexOf一样简单(“存在”)) 我该怎么做?

如何在不同的IOExceptions之间以编程方式区分?

我正在为写入Process对象的StandardInput流的代码执行一些exception处理。 进程有点像unix head命令; 它只读取部分输入流。 当进程终止时,写入线程失败: IOException The pipe has been ended. (Exception from HRESULT: 0x8007006D) 我想捕获这个exception,让它优雅地失败,因为这是预期的行为。 但是,对我而言,如何将其与其他IOExceptions进行强有力的区分并不明显。 我可以使用消息,但我理解这些是本地化的,因此这可能不适用于所有平台。 我也可以使用HRESULT,但我找不到任何指定此HRESULT仅适用于此特定错误的文档。 这样做的最佳方式是什么?

尝试删除文件时如何调试“共享冲突”

我有一个multithreadingC#应用程序,它创建文件,打开它们进行处理,然后在完成后删除它们。 此应用程序可以处理1到100个文件。 有些随机(很可能归因于应用程序的multithreading特性)当我尝试在处理后删除文件时,我收到了共享冲突。 我的直觉说,维克,在尝试删除文件之前,你没有正确关闭/处理文件。 如果它发生在每个文件中,我会尽我所能,但事实并非如此。 所以,我试图找出我犯了错误的地方。 那里的任何人都有关于如何调试这种类型的exception的指示? 如果有意义,我很乐意在文件上看到堆栈跟踪。 我将尝试显示伪代码,但是,我的问题更多的是关于如何调试这种类型的exception: 应用事件: 操作开始 + =创建新处理器。 传输文件 + = Processor.ProcessFile并将新的Document对象添加到处理器的文档集合(作为路径,而不是文件) 操作完成 + = Processor.Aggregate files,创建包含文件内容的新文件。 完成此方法后,它将调用ProcessorFinished。 处理器事件: 处理器已完成 + = Application_CleanUpProcessor。 在这种方法中,我处理了处理器,而处理器又处理了一个删除文件的文档对象。

如何忽略exception并完成尝试

所以我现在已经和这个问题争斗了大约一个星期,并且认为我知道这个问题,但我不想在那里报告答案,直到我把它固定下来。 简而言之,我在尝试使用SerialPort.Open()命令时遇到IOException。 事实certificate,这是非常常见的,大多数终端程序实际上也是如此,但他们只是忽略它。 请阅读上面的post,了解完整的故事。 现在我想要做的是忽略IOException但仍然打开串口 。 我不能用try / catch做到这一点,或者至少我不知道怎么做。 我想知道有没有办法尝试某种方式并以某种方式表明“我知道会抛出一个问题,这是一个安全问题,我选择忽略该exception并继续完成任务”。 要清楚,我不想忽略错误然后继续前进。 我想忽略错误并仍然完成操作 。 以下是我最好的猜测,但它不起作用。 try { serialPort1.Open(); } catch (System.IO.IOException) { MessageBox.Show(“An IO Exception occurred.”); } finally { //SAFELY IGNORE ERROR AND DO TASK ANYWAY HERE } 如果有人能帮我解决这个问题,我会非常感激。 编辑:如果我只是添加代码serialport1.Open后,我得到: 这与没有try / catch的情况基本相同。 我想要做的就是说我正在尝试这样做:我不在乎它会抛出错误,无论如何都要这样做。