簡體   English   中英

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

[英]Write to Specific line in text file C#

我有一個正在工作的Web應用程序。 我需要能夠獲取輸入數據並在(x)行數之后附加一個文本文件。

我的Web應用程序將C#與asp.net一起使用

誰能幫我嗎?

通常,除非讀取文件大小固定(以字節為單位),否則無法“插入”文件或進入特定行而不讀取所有其他文件。

通常,方法是這樣的:

  • 開始編寫新文件
  • 打開現有文件
  • 將前x行從舊文件復制到新文件
  • 寫新行
  • 將剩余的行從舊文件復制到新文件
  • 將舊的移動到備份文件
  • 將新文件移到舊名稱
  • 刪除備份文件

(這可確保在任何一點上至少都有某種形式的舊文件。如果您只是刪除舊文件,然后將新文件移到適當位置,則可以使其稍微簡化一些。)

不要忘記確保同步正確-您不想同時運行此算法的兩個副本...

編輯:如果您有XML文件,那么我建議通常只是將其加載到DOM中(例如,使用LINQ to XML),進行更改,然后再次將其保存。 不要將其視為非結構化文本文件。

可以使用XmlReaderXmlWriter提高效率-但您肯定必須讀取整個原始文件並寫出新文件。 您是否對簡單代碼進行了基准測試,發現它太慢了? 你經常這樣做嗎? 文件有多大?

我建議您找到另一種策略,特別是關系數據庫管理系統。 文本文件位於文件系統上,並且不像良好的(read:not Access)數據庫那樣不支持並發訪問。 Web應用程序確實支持並發請求。 一旦有多個用戶同時工作,您的應用程序將遇到IO異常。

好的-感謝喬恩的幫助,我已經弄清楚了。


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

沒有你,我真的做不到。 你就是男人。 謝謝你的一切。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM