|
分類:[C#]
初めまして。無理を承知して書き込みます。 現在RSSリーダーを作成していまして、問題が生じ解決できないので書き込みます。 コードをすべて書いたのですが、初心者が書いたので相当長くなってしまっているので 相当見にくくなっているので、答えるのは難しいと思いますが、わかる方いらっしゃいましたら お願いします。
まず簡単に説明します。 form1をロードしたら、listbox2の単語とlistbox1の記事をchasenにかけて、 単語と記事が一致したら、その記事をテキストボックスに保存しようとしています。 前半部分はそのサービスを記述しています。 後半部分にテキストボックスに保存しようとしています。 そこで、記事がすでにテキストボックスにあるのなら記事を保存しない。 記事がテキストボックスにないのなら保存しようとしています。 しかし、最後の部分の else if(arunoka == false) { StreamWriter writetext = new StreamWriter(path, true, Encoding.GetEncoding("Shift_JIS")); writetext.WriteLine(listBox1.SelectedItems[k]); writetext.Close(); MessageBox.Show("記事を新たに保存しました。"); } の部分でコンパイルを通るのですが、保存の実行になるとエラー表示見たいのが出て、 「ハンドルされませんでした。別のプロセスで使用されているため、プロセスはファイル 'F:\RSS\中国.txt' にアクセスできません。」 となってしまいます。
何が問題なんでしょうか? わかるかたいっらしゃいましたらお願いします。 そして稚拙な文章と、無理な質問をして申し訳ありません。
private void Form1_Load(object sender, EventArgs e) { foreach (string fname in Directory.GetFiles("F:\\Rss")) { string filename = Path.GetFileNameWithoutExtension(fname); listBox2.Items.Add(filename); //listbox2に登録ワードを表示する。 } string url = textBox1.Text; RssFeed feed = RssFeed.Read(url); RssChannel channel = (RssChannel)feed.Channels[0]; RssItem item = (RssItem)listBox1.SelectedItem; listBox1.DataSource = channel.Items; dataGridView1.DataSource = channel.Items; linkLabel1.Text = channel.Title;
int k, l; int oo, pp; oo = listBox1.Items.Count; pp = listBox2.Items.Count; for (k = 0; k <= oo - 1; k++) { listBox1.SelectedIndex = k; } for (l = 0; l <= pp - 1; l++) { listBox2.SelectedIndex = l; } string[] param = { "-F%m\t%H\n" }; ChasenCS.setParams(param); //chasenを動作する for (k = 0; k < listBox1.SelectedItems.Count; k++) { for (l = 0; l < listBox2.SelectedItems.Count; l++) { article = ChasenCS.parseStr(listBox1.SelectedItems[k].ToString()); word = ChasenCS.parseStr(listBox2.SelectedItems[l].ToString()); int i, j, No1, No2; string[] Arrayarticle = article.Split('\n'); string[] Arrayword = word.Split('\n'); // 改行区切りで分割して配列に格納する No1 = Arrayword.Length; No2 = Arrayarticle.Length; for (i = 0; i < No1 - 2; i++) for (j = 0; j < No2 - 2; j++) { if (Arrayword[i] == Arrayarticle[j]) { listBox1.SelectedIndex = k; listBox2.SelectedIndex = l; string word0 = listBox2.SelectedItems[l].ToString(); string path = "F:\\RSS\\" + word0 + ".txt"; string kiji = listBox1.SelectedItems[k].ToString(); MessageBox.Show(kiji, "保存候補記事"); //保存記事がファイルにあるかないかを確認、あるなら保存しない、ないなら保存。 MessageBox.Show(path, "ファイル名");
StreamReader textFile; string line; int z; textFile = new StreamReader(path, Encoding.Default); line = textFile.ReadToEnd(); string[] Arrayline = line.Split('\n'); //textfileの中身を改行ごとに配列にいれる。 for (z = 0; z < Arrayline.Length ; z++) { MessageBox.Show(Arrayline[z], "ファイルの中身の1行"); bool onaji = kiji.Equals(Arrayline[z]); if ( onaji == true) { MessageBox.Show("記事がかぶりました。"); } else if( onaji == false) { bool arunoka; arunoka = line.Contains(kiji); if (arunoka == true) { MessageBox.Show("すでにありました。"); } else if(arunoka == false) { StreamWriter writetext = new StreamWriter(path, true, Encoding.GetEncoding("Shift_JIS")); writetext.WriteLine(listBox1.SelectedItems[k]); writetext.Close(); MessageBox.Show("記事を新たに保存しました。"); } } }
} else { }
} } } }
|