仕事で開発しているWebアプリがあります。入力データを取得し、(x)行の後にテキストファイルを追加できる必要があります。
私のウェブアプリはc#でasp.netを使用しています
誰か助けてくれませんか?
一般にファイルに「挿入」する方法はありません。または、固定サイズ(バイト単位)でない限り、他のすべてを読み取らずに特定の行に移動する方法はありません。
通常、アプローチは次のようになります。
(これにより、いつでも少なくとも何らかの形式の古いファイルが存在するようになります。古いファイルを削除してから新しいファイルを所定の場所に移動するだけで、ファイルを少し簡単にすることができます。)
これが適切に同期されていることを確認することを忘れないでください-このアルゴリズムの2つのコピーを同時に実行したくない...
編集:XMLファイルがある場合は、通常、それをDOMにロードし(たとえば、LINQ to XMLを使用して)、変更を加えてから、再度保存することをお勧めします。構造化されていないテキストファイルのように扱わないでください。
andを使用すると、これをより効率的にすることができますが、元のファイル全体を読み取って新しいファイルを書き出す必要があります。単純なコードのベンチマークを行い、遅すぎることに気づきましたか?どのくらいの頻度でこれを行っていますか?ファイルの大きさはどれくらいですか?XmlReader
XmlWriter
別の戦略、具体的にはリレーショナルデータベース管理システムを見つけることをお勧めします。テキストファイルはファイルシステム上に存在し、優れた(read:not Access)データベースのような同時アクセスをサポートしていません。Webアプリケーションは同時リクエストをサポートします。同時に複数のユーザーが作業していると、アプリでIO例外が発生します。
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();
私はあなたなしでは本当にそれをすることができなかったでしょう。あなたは男です。すべてに感謝します。