C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 画像の保存


(過去ログ 25 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■11477 / inTopicNo.1)  画像の保存
  
□投稿者/ しろうと (1回)-(2007/12/14(Fri) 19:10:20)

分類:[C#] 

ボタンクリックで画像を保存したいんですが、
ソースコードから正規表現を利用して「src=""」の「""」の中身を取得して
WebClientで保存しようとしたのですが、以下のコードだと
エラーは出てないみたいなんですが、保存はされないみたいです。
textBox1.Textは、ソースコードです。
できれば、保存する際に場所を指定したいのですがちょっとわからなくなってしまいました。

ご助言お願いします。

private void ImageSave_Click(object sender, EventArgs e)//画像の保存
{
// 「src」を探し出す正規表現を作成
Regex rSRC = new Regex("src\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))",
RegexOptions.IgnoreCase | RegexOptions.Compiled);

// Matchを作成
Match mSRC;

// 「src」を探して、それが .jpg .gif .png で終わる場合はファイルを取得
for (mSRC = rSRC.Match(textBox1.Text); mSRC.Success; mSRC = mSRC.NextMatch())
{
// 「src=""」の「""」の中身を取得
string val = mSRC.Groups[1].Value;

// 拡張子をチェック
if (val.ToLower().EndsWith(".jpg") || val.ToLower().EndsWith(".gif") ||
val.ToLower().EndsWith(".png"))
{

// ローカルディスクに保存するときの名前を作成
string lcfile = val;
if (val.IndexOf("/") != -1)
{
// ファイル名にパスが含まれている場合は取り除く
lcfile = val.Substring(val.LastIndexOf("/") + 1);
}

WebClient wc = new WebClient();

// ファイルをローカルのカレントディレクトリにダウンロードする
wc.DownloadFile(val, lcfile);

}
}
}
引用返信 編集キー/
■11478 / inTopicNo.2)  Re[1]: 画像の保存
□投稿者/ Jitta on the way (56回)-(2007/12/14(Fri) 19:28:44)
No11477 (しろうと さん) に返信
> ボタンクリックで画像を保存したいんですが、
> ソースコードから正規表現を利用して「src=""」の「""」の中身を取得して
> WebClientで保存しようとしたのですが、以下のコードだと
> エラーは出てないみたいなんですが、保存はされないみたいです。
> textBox1.Textは、ソースコードです。
> できれば、保存する際に場所を指定したいのですがちょっとわからなくなってしまいました。
>
> ご助言お願いします。
>
> private void ImageSave_Click(object sender, EventArgs e)//画像の保存
> {
> // 「src」を探し出す正規表現を作成
> Regex rSRC = new Regex("src\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))",
> RegexOptions.IgnoreCase | RegexOptions.Compiled);
>
> // Matchを作成
> Match mSRC;
>
> // 「src」を探して、それが .jpg .gif .png で終わる場合はファイルを取得
> for (mSRC = rSRC.Match(textBox1.Text); mSRC.Success; mSRC = mSRC.NextMatch())
> {
> // 「src=""」の「""」の中身を取得
> string val = mSRC.Groups[1].Value;
>
> // 拡張子をチェック
> if (val.ToLower().EndsWith(".jpg") || val.ToLower().EndsWith(".gif") ||
> val.ToLower().EndsWith(".png"))
> {
>
> // ローカルディスクに保存するときの名前を作成
> string lcfile = val;
> if (val.IndexOf("/") != -1)
> {
> // ファイル名にパスが含まれている場合は取り除く
> lcfile = val.Substring(val.LastIndexOf("/") + 1);
> }
>
> WebClient wc = new WebClient();
>
> // ファイルをローカルのカレントディレクトリにダウンロードする
> wc.DownloadFile(val, lcfile);
>
> }
> }
> }



それで、プログラムはどこまで意図通りに実行されているのでしょう?

src が見つけだせない?拡張子の判定がうまくいっていない?イメージ ファイルのリクエストができていない?ローカル リソースに保存ができない?
引用返信 編集キー/
■11479 / inTopicNo.3)  Re[2]: 画像の保存
□投稿者/ しろうと (2回)-(2007/12/14(Fri) 19:40:39)
回答ありがとうございます。


プログラムは、ローカルリソースに保存だけができていません。
それまでは、できているんですが。。。

引用返信 編集キー/
■11480 / inTopicNo.4)  Re[3]: 画像の保存
□投稿者/ Jitta on the way (57回)-(2007/12/14(Fri) 19:48:11)
No11479 (しろうと さん) に返信
> 回答ありがとうございます。
>
>
> プログラムは、ローカルリソースに保存だけができていません。
> それまでは、できているんですが。。。
>


サーバーへ要求するファイル名は、正しく作成されていますか?
また、保存先も、なんだか怪しいと思います。
引用返信 編集キー/
■11481 / inTopicNo.5)  Re[4]: 画像の保存
□投稿者/ しろうと (3回)-(2007/12/14(Fri) 21:13:03)

サーバーへ要求するファイル名は、正しく作成いると思います。
保存先が怪しいとはどういうことでしょう?
素人なもので理解できなくてすみません。
引用返信 編集キー/
■11485 / inTopicNo.6)  Re[5]: 画像の保存
□投稿者/ はつね (369回)-(2007/12/15(Sat) 08:43:23)
No11481 (しろうと さん) に返信
> サーバーへ要求するファイル名は、正しく作成いると思います。
> 保存先が怪しいとはどういうことでしょう?

サーバーへ要求しているファイル名、保存先のそれぞれの内容を調べ(ステップ実行で該当する命令実行時の変数の内容を表示して)てみましょう。
その内容に問題点が見つけられなかったら、ここにその内容を記載してみましょう(できるかぎり編集せずにそのまま貼り付けるのがベスト)。

引用返信 編集キー/
■11487 / inTopicNo.7)  Re[6]: 画像の保存
□投稿者/ しろうと (4回)-(2007/12/15(Sat) 16:03:17)
ステップ実行しました。
以下のようになったんですが、問題ありますでしょうか?


this {Brows1.Form1, Text: Form1} Brows1.Form1
sender {画像保存} object {System.Windows.Forms.ToolStripMenuItem}
e {System.EventArgs} System.EventArgs
lcfile "logo.gif" string
wc {System.Net.WebClient} System.Net.WebClient
val "http://k.yimg.jp/images/top/sp/logo.gif" string
rSRC {src\s*=\s*(?:"(?<1>[^"]*)"|(?<1>\S+))} System.Text.RegularExpressions.Regex
mSRC {src="http://k.yimg.jp/images/top/sp/logo.gif"} System.Text.RegularExpressions.Match

引用返信 編集キー/
■11488 / inTopicNo.8)  Re[7]: 画像の保存
□投稿者/ よねKEN (95回)-(2007/12/15(Sat) 16:33:41)
2007/12/15(Sat) 16:41:39 編集(投稿者)

> lcfile "logo.gif" string

ローカルの保存先ですが"logo.gif"というパスになっています。
カレントディレクトリ(どこだか知りませんが)の下にlogo.gifファイルができていませんか?

引用返信 編集キー/
■11489 / inTopicNo.9)  Re[8]: 画像の保存
□投稿者/ しろうと (5回)-(2007/12/15(Sat) 17:23:49)
探したんですができてないみたいです。
引用返信 編集キー/
■11494 / inTopicNo.10)  Re[9]: 画像の保存
□投稿者/ はつね (370回)-(2007/12/15(Sat) 23:13:21)
2007/12/15(Sat) 23:17:31 編集(投稿者)

No11489 (しろうと さん) に返信
> 探したんですができてないみたいです。

カレントディレクトリはどのように調べましたか?

ためしに、
wc.DownloadFile(val, lcfile);

wc.DownloadFile(val, "C:\" + lcfile));
にしてCドライブのルートにlogo.gifファイルができるかを確認してみてください(ただし変更部分の文法は自信がないので調べてみて)。


引用返信 編集キー/
■11495 / inTopicNo.11)  Re[9]: 画像の保存
□投稿者/ 魔界の仮面弁士 (550回)-(2007/12/15(Sat) 23:37:29)
No11489 (しろうと さん) に返信
> 探したんですができてないみたいです。

OS 等がわからないので外しているかも知れませんが、そのファイルは
カレント ディレクトリ以外の場所……たとえば Temp フォルダや、
ユーザー別フォルダの \AppData\Local\VirtualStore\ 以下に配置されてはいませんか?
引用返信 編集キー/
■11555 / inTopicNo.12)  Re[5]: 画像の保存
□投稿者/ Jitta (437回)-(2007/12/17(Mon) 22:33:46)
No11481 (しろうと さん) に返信
> サーバーへ要求するファイル名は、正しく作成いると思います。
> 保存先が怪しいとはどういうことでしょう?

 まずは、val が指す URI に、InternetExplorer などでアクセスして、本当にリソースがあるか確認します。
 今回は "http://k.yimg.jp/images/top/sp/logo.gif" ということで大丈夫のようですが、src 属性に相対パスが書かれていると、失敗しますよね。サーバへ要求するファイル名が正しいかどうかは、これを確認したものでした。

 保存先は、ファイル名しか指定されていないので、どこへ保存されているのかわかりませんでした。怪しいのは、「どこに保存されるかわからないよ」という意味です。
 さて、 http://msdn2.microsoft.com/ja-jp/library/ez801hhe.aspx を見ると、Application.StatuupPath (EXE ファイルがあるディレクトリ)のようです。しかし、OpenFileDialog や SaveFileDialog などを表示していると、カレント ディレクトリが変わってしまっているかもしれません。ここは、ディレクトリを指定して保存するようにするべきかと思います。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -