Tag: file io

C#找不到文件

我有一个C#Visual Studio 2008表单,需要读取相关文件’character / attacks.txt’的内容.File.Exists()在运行时返回false,即使我很肯定我的目录已经排序。 码: try { System.IO.StreamReader file = new System.IO.StreamReader(“character/attacks.txt”); int counter = 0; int numberOfLines = 0; string line; while ((line = file.ReadLine()) != null) { numberOfLines++; } string[] attacks = new string[numberOfLines]; while ((line = file.ReadLine()) != null) { attacks[counter] = line; counter++; } file.Close(); print(attacks.ToString()); } catch (Exception ex) […]

文件夹事件中的新文件

有人可以帮我理解如何构建一个24/7全天候监听特定文件夹的软件(例如C:\ Actions),每次我在该文件夹中放置一个新文件时,软件需要阅读和处理它。 如果文件夹中没有文件,则软件不应该只做等待下一个文件。 文件示例(action1.txt)内容(1 + 1) 软件正在处理(1 + 1),将答案(2)保存到另一个文件夹并从“C:\ Actions \”文件夹中删除文件(action1.txt)。 我知道如何读取文件并进行处理.. 我很难理解如何在文件夹中有新文件时如何触发软件以及如何在不使用太多内存或导致内存泄漏的情况下全天候运行软件…… 直到现在我已经以原始的循环方式使用它,每次60秒(睡眠)我正在检查文件夹中的新文件。 那是无用的,不那么有效。 如果有人能帮我理解如何让它更有效,我会很高兴的。 非常感谢你

用C#编写XML

我的C#有点生疏,我以前从未用它编写XML。 如果我尝试编写除元素之外的任何内容,我就无法将XML写入文件。 这是我的测试代码: var guiPath = txtGuiPath.Text; MessageBox.Show(“Dumping File: ” + guiPath); try { var writer = new XmlTextWriter(“client_settings.xml”, null); writer.WriteStartDocument(); writer.WriteComment(“Config generated on 01/01/01”); writer.WriteStartElement(“Config”); writer.WriteStartElement(“GuiPath”); writer.WriteString(guiPath); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); writer.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } MessageBox.Show(“Finished Dumping”); 如果guiPath为空,我会得到以下XML: 但如果guiPath中有任何文本,那么没有任何内容写入文件。 我甚至可以删除client_settings.xml文件并反复激活此代码,除非guiPath为空,否则永远不会生成XML文件。 将类似“This is a test”的内容传递给WriteString()也可以。 更新 因为我试图写出一个系统路径,这似乎是问题所在。 如果我删除所有反斜杠,它将正确地写出结果字符串,但如果我将它传递给WriteString或WriteCData,则XML根本不会写入。 更新2 事实certificate我遇到这么多问题的原因是因为XML文件是在guiPath设置的任何路径中生成的,而不是在应用程序运行的目录中生成的(所以对我来说它看起来好像没有生成在所有)。 因此,如果我将guiPath设置为’C:\ Program […]

在C#中对File类使用静态方法是否安全?

我在ASP.Net应用程序的代码隐藏中有以下代码,其中正在读取文件,然后写入文件。 码 var state= File.ReadAllText(Server.MapPath(string.Format(“~/state/{0}”, fileName))); if(state.indexOf(“1”) == 0) { File.WriteAllText(Server.MapPath(string.Format(“~/state/{0}”, fileName)), newState); } 有时,但并非总是如此,我得到以下exception。 例外 The process cannot access the file ‘C:\inetpub\wwwroot\mywebsite1\state\20150905005929435_edf9267e-fad1-45a7-bfe2-0e6e643798b5’ because it is being used by another process. 我猜测文件读取操作有时不会在写入操作发生之前关闭文件,或者可能是文件写入操作未在Web应用程序的下一个请求到来之前关闭文件。 但是,我找不到究竟是什么原因。 问题 :如何避免发生此错误? 使用File类是不安全的,而是使用FileStream对象的传统方法,我总是显式地处理FileStream对象? 更新1 我尝试了一种重试循环方法,但即使这似乎也没有解决问题,因为如果ASP.Net页面一次又一次非常快速地提交,我能够重现相同的错误。 所以我回到了我的案例中找到一个万无一失的解决方案。 string state = null; int i = 0; while (i < 20) { try { state […]

为什么“如果更新则复制”在文件更新时不复制文件?

我在Visual Studio Express中有一个如下所示的解决方案: C#中的LogicSchema类,它将在运行时解析指定的XML文件。 以下是Program.cs的main方法: LogicSchema ls = new LogicSchema( XDocument.Load( “schemas\\C#Schema.xml”, LoadOptions.PreserveWhitespace)); 我在我的解决方案中创建了一个名为“schemas”的文件夹,用于保存XML文件并将Build Action设置为Content ,并将“Copy to Output Directory”值设置为Copy for new 。 我的期望是,如果在记事本中打开文件,进行更改并保存,当我按F5时,XML文件的更新版本将被复制到输出目录(在本例中为bin \ debug)。 但是,除非我选择Rebuild,否则更新的文件不会复制到输出目录。 常规构建不起作用。 我需要更改什么,以便当我按F5时,文件在更新时被复制到输出目录?

创建日期和File.Copy问题

我正在尝试将文件从一个目录复制到另一个目录,并根据文件创建日期进行测试。 File.Copy(fileName, directory + fileNameOnly, true); 当我检查创建日期以确保它不超过5天时,我的程序中会出现问题。 FileInfo file = new FileInfo(fileName); if (file.CreationTime.AddHours(120) < DateTime.Now) {} 我已经看到复制后的创建日期设置为1980-01-01。 这对我的要求没有用,因为我希望从原始文件维护创建日期。 是否有另一种比较日期的方法,或者是丢失创建日期值的副本。 我想我的问题是,我怎样才能保持创作日期?

File.Copy之后,另一个进程正在使用该文件

我正在尝试管理我的Web应用程序中的文件。 有时,我必须在文件夹中创建一个文件(使用File.Copy): File.Copy(@oldPath, @newPath); 几秒钟后,该文件可能会被删除: if (File.Exists(@newPath)) { File.Delete(@newPath); } 但是,我不知道为什么新文件在File.Copy之后仍然被服务器进程(IIS,w3wp.exe)阻止。 在File.Delete之后我得到了exception: “该进程无法访问该文件,因为它正由另一个进程使用。” 根据Api,File.Copy不会阻止文件,是吗? 我试图释放资源,但它没有奏效。 我该如何解决这个问题? 更新:确实,使用Process Explorer,IIS进程阻止了该文件。 我试图实现复制代码以手动释放资源,但问题仍然存在: public void copy(String oldPath, String newPath) { FileStream input = null; FileStream output = null; try { input = new FileStream(oldPath, FileMode.Open); output = new FileStream(newPath, FileMode.Create, FileAccess.ReadWrite); byte[] buffer = new byte[32768]; int read; while […]

C#StreamReader,“ReadLine”用于自定义分隔符

获得StreamReader.ReadLine()方法function的最佳方法是什么,但使用自定义(字符串)分隔符? 我想做的事情如下: String text; while((text = myStreamReader.ReadUntil(“my_delim”)) != null) { Console.WriteLine(text); } 我试图使用Peek()和StringBuilder来创建自己的,但效率太低。 我正在寻找建议或可能是一个开源解决方案。 谢谢。 编辑 我应该早点澄清一下……我已经看到了这个答案 ,但是,我不想将整个文件读入内存。

删除当前加载的程序集

在我的应用程序中附带一个卸载程序。 一切都运行正常,除了在完成所有操作后我找不到删除uninstaller.exe文件的方法。 我试图将当前程序集exe复制到临时目录,但原始文件的文件句柄仍然被锁定。 有任何想法吗?

如何判断文件是否已完成FTP?

我们有一个C#Windows服务轮询一个等待FTP文件发布的文件夹。为了避免在文件仍被写入时使用该文件,我们首先尝试锁定文件,但是,似乎有在创建FTP文件之后但在写入文件之前我们获取文件锁定的情况,因此我们最终打开一个空文件。 有没有可靠的判断FTP是否完整?