0

以下の私のプログラムは、ディレクトリ内のファイルを検索し、それを開いて読み取り、書き込みを行う単純なウィンドウフォームです。その後、ファイル内の単語を検索する検索ボタンがありますが、これは、 .txt拡張子は、ワードドキュメントにもこれを実行したい場合に役立ちます。ファイルが別の拡張子である場合は、.txtおよび.doc拡張子の付いたファイルを開きたいので、ファイルを開くことができないというエラーをポップアップします。これは以下の私のコードです。このプログラムの変更やアイデアの提供を手伝ってくれる人はいますか?

namespace my_project
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog of = new OpenFileDialog();
            of.ShowDialog();
            textBox1.Text = of.FileName;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            StreamReader sr = new StreamReader(textBox1.Text);
            richTextBox1.Text = sr.ReadToEnd();
            sr.Close();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            StreamWriter sw = new StreamWriter(textBox1.Text, true);
            sw.WriteLine(textBox2.Text);
            sw.Close();

        }

        private void button4_Click(object sender, EventArgs e)
        {
            int index = 0; string temp = richTextBox1.Text; richTextBox1.Text = ""; richTextBox1.Text = temp;
            while (index < richTextBox1.Text.LastIndexOf(textBox3.Text))
            {
                richTextBox1.Find(textBox3.Text, index, richTextBox1.TextLength, RichTextBoxFinds.None);
                richTextBox1.SelectionBackColor = Color.Yellow;
                index = richTextBox1.Text.IndexOf(textBox3.Text, index) + index;
            }
        }
    }
}
4

3 に答える 3

2

.docファイルの検索は少し難しくなります。これは、ドキュメントファイルにテキストを装飾する機能(さまざまなフォント、太字、斜体、余白など)を提供するためのマークアップが含まれているためです。これを支援する可能性のあるサードパーティのライブラリと製品があります。一方、Txtファイルはプレーンテキストであるため、これで問題は発生しません。

検証を実装するには、File静的クラスを使用してファイルの拡張子を確認し、次に何をするかを決定します。System.IO.Path.GetExtensionメソッドを使用することもできます。このメソッドは、ファイル名を取得して拡張子を付けます。

于 2012-04-21T05:16:26.610 に答える
2

Wordファイルを検索するには、次のコードが必要です。

最初に、Microsoft12または14オブジェクトライブラリを参照します。

Microsoft.Office.Interop.Word.ApplicationClass wordObject = new ApplicationClass();
object file = textBox1.Text; //this is the path
object nullobject = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Word.Document docs = wordObject.Documents.Open
 (ref file, ref nullobject, ref nullobject, ref nullobject,
ref nullobject, ref nullobject, ref nullobject, ref nullobject,
ref nullobject, ref nullobject, ref nullobject, ref nullobject,
ref nullobject, ref nullobject, ref nullobject, ref nullobject);
docs.ActiveWindow.Selection.WholeStory();
docs.ActiveWindow.Selection.Copy();
IDataObject data = Clipboard.GetDataObject();
richTextBox1.Text = data.GetData(DataFormats.Text).ToString();
docs.Close(ref nullobject, ref nullobject, ref nullobject);

.Net 4.0をターゲットにしている場合は、オプションのパラメーターをサポートしているため、すべてのnullobjectが必要になることはありません。

于 2012-04-21T05:22:19.717 に答える
0

何を探しているのか正確にはわかりません。ここにいくつかの提案があります:

1)OpenFileDialogに.txtファイルのみを表示するには:

参照:OpenFileDialogフィルタープロパティ

// Create an instance of the open file dialog box.
OpenFileDialog openFileDialog1 = new OpenFileDialog();

// Set filter options and filter index.
openFileDialog1.Filter = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
openFileDialog1.FilterIndex = 1;
...

2)ファイルの拡張子が.txtであるかどうかを確認するには、String.EndsWith()を使用します。

参照:String.EndsWith()メソッド

if (myfile.EndsWith (".txt", true, null) {
  ..

3).txtファイルタイプのデフォルトプログラムを呼び出すには、ShellExec()を使用します。

参照:UseShellExecuteプロパティ

   System.Diagnostics.ProcessStartInfo info = 
     new System.Diagnostics.ProcessStartInfo("c:\\temp\\myfile.txt");

   info.UseShellExecute = true;
   info.Verb = "open";

   System.Diagnostics.Process.Start(info);

「お役に立てば幸いです。

于 2012-04-21T05:19:17.997 に答える