0
FileName="1.pdf",filepath="f:/test1"
FileName="2.pdf",filepath="f:/test2"
FileName="3.pdf",filepath="f:/test3"
FileName="4.pdf",filepath="f:/test4"
FileName="5.pdf",filepath="f:/test5"
FileName="6.pdf",filepath="f:/test6"

新しいファイルを作成したくありません。同じファイルに上書きしても大丈夫です

以下を試してみました。

var reader = File.OpenText("f:/test5");
reader. // ?

読者の後に何を置くべきかわかりません。別の方法がある場合は、解決策を教えてください。一意のファイル名に基づいて特定の行のみを削除したいと思います。ファイル名として5.pdfを使用している場合は、「FileName ="5.pdf"...行」である行全体をファイルから削除または削除する必要があります。もう一度新しいファイル。解決策を教えてください。ありがとう。

4

4 に答える 4

1

ファイルを書き直さずにテキストファイルから行を削除することはできません。このようなことをする

string filename =
   Path.Combine(
       Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),
       "Test1.txt");

string[] lines = File.ReadAllLines(filename);
var list = new List<string>(lines);
list.RemoveAt(4);
File.WriteAllLines(filename, list.ToArray());

編集:

次のような特定のファイル名の行を見つけることができます。

int index = list.FindIndex(s => s.EndsWith("/test5\""));
// Or whatever test is appropriate.

if (index >= 0) {
    list.RemoveAt(index);
    File.WriteAllLines(filename, list.ToArray());
}
于 2012-10-01T14:08:44.027 に答える
0

gnuツールを使用してもかまわない場合は、sedhttp ://en.kioskea.net/faq/1451-sed-delete-one-or-more-lines-from-a-fileを使用できます。

于 2012-10-01T14:07:26.180 に答える
0

私が知っている限り、OSが新しいIOアーティファクトを作成するため、技術的に不可能です(ちなみに、これについてはよくわかりません)。

しかし、もっと重要なのは、それが非常に危険だということです。IO操作は失敗する可能性があるため、ファイル上の操作の一貫性を何らかの方法で保証する必要があります。

これを行うための可能な方法の1つは次のとおりです。

  • スキップしたい行を除くすべての行を新しいTEMPファイルに書き込みます
  • 古いファイルの名前を他の一時的な名前に変更します
  • 前のファイルの名前でfisrtTEMPファイルの名前を変更します
  • 元のファイルを削除します。
于 2012-10-01T14:08:43.043 に答える
0

使用するユーティリティや記述するコードに関係なく、オペレーティングシステムは常にそれを実行するための新しいファイルを作成します。

于 2012-10-01T14:13:31.090 に答える