0

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

我的网络应用程序正在使用带有 c# 的 asp.net

任何人都可以帮助我吗?

4

3 回答 3

2

一般来说,没有办法“插入”到文件中 - 或者在不读取所有其他文件的情况下转到特定行,除非它们的大小是固定的(以字节为单位)。

通常,该方法类似于:

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

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

不要忘记确保这是适当同步的——你不想让这个算法的两个副本同时运行......

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

可能会使用XmlReaderand来提高效率XmlWriter- 但您肯定必须读取整个原始文件并写出新文件。您是否对简单代码进行了基准测试并发现它太慢了?你多久做一次?文件有多大?

于 2010-06-30T21:19:06.367 回答
0

好的 - 感谢您的帮助,乔恩我已经弄清楚了。


            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();

没有你我真的做不到。你是男人。感谢一切。

于 2010-07-01T00:31:33.493 回答
0

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

于 2010-06-30T21:45:00.880 回答