0

仕事で開発しているWebアプリがあります。入力データを取得し、(x)行の後にテキストファイルを追加できる必要があります。

私のウェブアプリはc#でasp.netを使用しています

誰か助けてくれませんか?

4

3 に答える 3

2

一般にファイルに「挿入」する方法はありません。または、固定サイズ(バイト単位)でない限り、他のすべてを読み取らずに特定の行に移動する方法はありません。

通常、アプローチは次のようになります。

  • 新しいファイルの書き込みを開始します
  • 既存のファイルを開く
  • 古いファイルから新しいファイルに最初のx行をコピーします
  • 新しい行を書く
  • 古いファイルから新しいファイルに残りの行をコピーします
  • 古いものをバックアップファイルに移動します
  • 新しいファイルを古い名前に移動します
  • バックアップファイルを削除します

(これにより、いつでも少なくとも何らかの形式の古いファイルが存在するようになります。古いファイルを削除してから新しいファイルを所定の場所に移動するだけで、ファイルを少し簡単にすることができます。)

これが適切に同期されていることを確認することを忘れないでください-このアルゴリズムの2つのコピーを同時に実行したくない...

編集:XMLファイルがある場合は、通常、それをDOMにロードし(たとえば、LINQ to XMLを使用して)、変更を加えてから、再度保存することをお勧めします。構造化されていないテキストファイルのように扱わないでください。

andを使用すると、これをより効率的にすることができますが、元のファイル全体を読み取って新しいファイルを書き出す必要があります。単純なコードのベンチマークを行い、遅すぎることに気づきましたか?どのくらいの頻度でこれを行っていますか?ファイルの大きさはどれくらいですか?XmlReaderXmlWriter

于 2010-06-30T21:19:06.367 に答える
0

別の戦略、具体的にはリレーショナルデータベース管理システムを見つけることをお勧めします。テキストファイルはファイルシステム上に存在し、優れた(read:not Access)データベースのような同時アクセスをサポートしていません。Webアプリケーションは同時リクエストをサポートします。同時に複数のユーザーが作業していると、アプリでIO例外が発生します。

于 2010-06-30T21:45:00.880 に答える
0

OK-あなたの助けのおかげでジョン私はそれを理解しました。


            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 に答える