写入文本文件C#中的特定行

时间:2010-06-30 21:09:39

标签: c# asp.net xml wpl

我有一个我在工作中开发的网络应用程序。我需要能够获取输入数据并在(x)行数之后追加文本文件。

我的网络应用正在使用带有c#

的asp.net

有人可以帮我吗?

3 个答案:

答案 0 :(得分:2)

除非它们具有固定大小(以字节为单位),否则无法一般地“插入”到文件中或者在没有读取所有其他行的情况下进入特定行。

通常方法如下:

  • 开始撰写新文件
  • 打开现有文件
  • 将旧文件中的前x行复制到新文件
  • 写新行
  • 将剩余的行从旧文件复制到新文件
  • 将旧文件移至备份文件
  • 将新文件移至旧名称
  • 删除备份文件

(这确保在任何一点上至少以某种形式旧文件。如果您只删除旧文件然后将新文件移动到位,则可以使其稍微简单一些。 )

不要忘记确保相应地同步 - 您不希望同时运行此算法的两个副本...

编辑:如果你有XML文件,那么我建议通常只是将它加载到DOM中(例如使用LINQ to XML),进行更改,然后再将其保存。不要像对待非结构化文本文件那样对待它。

可以使用XmlReaderXmlWriter提高效率 - 但您肯定必须阅读整个原始文件并写出新文件。您是否对简单代码进行了基准测试,发现它太慢了?你经常这样做吗?文件有多大?

答案 1 :(得分:0)

我建议寻找另一种策略,特别是关系数据库管理系统。文本文件存在于文件系统中,不支持并发访问,如良好(读取:非访问)数据库。 Web应用程序支持并发请求。一旦有多个用户同时工作,您的应用就会遇到IO异常。

答案 2 :(得分:0)

好的 - 感谢你的帮助,Jon我已经弄明白了。


            FileInfo fi = new FileInfo(Server.MapPath("~/Playlists/" + user + "/" + ListBox1.SelectedItem.Text  + ".wpl"));
            XmlDocument originalXML = new XmlDocument();
            originalXML.Load(fi.FullName);
            XmlWriter newXML = XmlWriter.Create(Server.MapPath("~/Playlists/" + user + "/" + ListBox1.SelectedItem.Text + ".wpl"));
            XmlNode smil = originalXML.SelectSingleNode("smil/body/seq");
            XmlNode media = originalXML.CreateNode(XmlNodeType.Element, "media", null);
            XmlAttribute src = originalXML.CreateAttribute("src");
            DirectoryInfo di = new DirectoryInfo(Server.MapPath("~" + folder));


            foreach (FileInfo file in di.GetFiles("*", SearchOption.AllDirectories))
            {
                string path = file.FullName;
                path = path.Replace(@"F:\Music\Music by Artist", "http://bgab-mor01-n/Music");
                path = path.Replace(@"\", "/");
                path = path.Replace(",", "");
                path = path.Replace("'", "");
                path = path.Replace("&", "");
                if (file.Extension == ".mp3" || file.Extension == ".wma" || file.Extension == ".MP3")
                {
                    src.Value = path;
                    media.Attributes.Append(src);
                    smil.AppendChild(media);

                }

            }

            originalXML.Save(newXML);
            newXML.Close();

没有你,我真的无法做到。你就是男人。谢谢你的一切。

相关问题