我有一个正在工作中开发的网络应用程序。我需要能够获取输入数据并在 (x) 行之后附加一个文本文件。
我的网络应用程序正在使用带有 c# 的 asp.net
任何人都可以帮助我吗?
一般来说,没有办法“插入”到文件中 - 或者在不读取所有其他文件的情况下转到特定行,除非它们的大小是固定的(以字节为单位)。
通常,该方法类似于:
(这确保了在任何时候至少有某种形式的旧文件。如果您只是删除旧文件然后将新文件移动到位,则可以稍微简单一些。)
不要忘记确保这是适当同步的——你不想让这个算法的两个副本同时运行......
编辑:如果您有 XML 文件,那么我建议通常将其加载到 DOM 中(例如使用 LINQ to XML),进行更改,然后再次保存。不要将其视为非结构化文本文件。
您可能会使用XmlReader
and来提高效率XmlWriter
- 但您肯定必须读取整个原始文件并写出新文件。您是否对简单代码进行了基准测试并发现它太慢了?你多久做一次?文件有多大?
好的 - 感谢您的帮助,乔恩我已经弄清楚了。
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();
没有你我真的做不到。你是男人。感谢一切。
我建议寻找另一种策略,特别是关系数据库管理系统。文本文件存在于文件系统中,不支持像好的(读取:非访问)数据库那样的并发访问。Web 应用程序确实支持并发请求。一旦您有多个用户同时工作,您的应用程序将遇到 IO 异常。