我有一个我在工作中开发的网络应用程序。我需要能够获取输入数据并在(x)行数之后追加文本文件。
我的网络应用正在使用带有c#
的asp.net有人可以帮我吗?
答案 0 :(得分:2)
除非它们具有固定大小(以字节为单位),否则无法一般地“插入”到文件中或者在没有读取所有其他行的情况下进入特定行。
通常方法如下:
(这确保在任何一点上至少以某种形式旧文件。如果您只删除旧文件然后将新文件移动到位,则可以使其稍微简单一些。 )
不要忘记确保相应地同步 - 您不希望同时运行此算法的两个副本...
编辑:如果你有XML文件,那么我建议通常只是将它加载到DOM中(例如使用LINQ to XML),进行更改,然后再将其保存。不要像对待非结构化文本文件那样对待它。 可以使用XmlReader
和XmlWriter
提高效率 - 但您肯定必须阅读整个原始文件并写出新文件。您是否对简单代码进行了基准测试,发现它太慢了?你经常这样做吗?文件有多大?
答案 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();
没有你,我真的无法做到。你就是男人。谢谢你的一切。