プロが教えるわが家の防犯対策術!

こんにちは
僕はC、C++をある程度勉強しているのですが、タイトルのようにリンク先の画像保存を行うには、C#が一番のようなので、必死に手さぐりでコードを書いています。

実現したい内容は、連番のURL先の画像を自動保存する、というプログラムです。
http://001.jpg
http://002.jpg
http://003.jpg
.
.
.

といったURLを、基本のURL、桁数、開始値、終了値を入力し、自動的にアクセス、保存させたいわけです。

こちらがコードになります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace aaa {
class Program {
static void Main(string[] args) {
string s;
string url = System.Console.ReadLine();
Console.WriteLine("書式");
string frm = Console.ReadLine();

Console.Write("開始値;");
int start = int.Parse(Console.ReadLine());
Console.Write("終了値;");
int end = int.Parse(Console.ReadLine());

for (int i = start; i <= end; i++)
{
s = i.ToString();
System.Net.WebClient wc = new System.Net.WebClient();
wc.DownloadFile(url.Replace(url, i.ToString(frm)), @"【ここには保存させたいフォルダのパスを入れます】" + s + ".jpg");
wc.Dispose();
Console.WriteLine(url, i.ToString(frm));
}

}

}
}

例のURLを使うなら、入力は
http://{0}.jpg
0
1
10(仮)

です。

これで動くように作ったつもりなんですが、終了値入力終了後、エラーが出てきてしまいます。

コンパイラ側で
「WebExceptionはハンドルされませんでした」
「ファイル`C:\Users\【僕のユーザー名】\AppData\Local\Temporary Projects\Project\bin\Debug\1'が見つかりませんでした」

というものです。

どうかC#に慣れている方ご教授ください。
当方は、プログラミングの基礎知識はありますが、素人で、かつC#に関する知識はほぼゼロです。
メソッドやクラス等の書式も根本的に勘違いしている可能性もあります。すみません。
出来れば、具体的な改善ソースを掲示して頂くか、分かりやすく噛み砕いた説明の方をお願いしたいです。

A 回答 (2件)

for (int i = start; i <= end; i++)


{
s = i.ToString();
// System.Net.WebClient wc = new System.Net.WebClient();
// wc.DownloadFile(url.Replace(url, i.ToString(frm)), @"【ここには保存させたいフォルダのパスを入れます】" + s + ".jpg");
Console.WriteLine(url.Replace(url, i.ToString(frm)));
Console.WriteLine(@"【ここには保存させたいフォルダのパスを入れます】" + s + ".jpg");
// wc.Dispose();// wc.Dispose();
// Console.WriteLine(url, i.ToString(frm));
}

と、forの中をコメントアウトし、wc.DownloadFileに渡される引数をWriteLineしてみてください
あなたが期待するのは

連番のURL
保存先ファイル名

だと思いますが、そうはならないはずです。


> 僕はC、C++をある程度勉強しているのですが、タイトルのようにリンク先の画像保存を行うには、C#が一番のようなので、必死に手さぐりでコードを書いています。

おそらく一番簡単なのは、連番ダウンロードが可能なアプリを使うことです。
コマンドラインで実行できるものもあります。

次は、連番URLを出力する簡単なプログラム + URL一覧からダウンロードできるアプリ
C,C++,C#どれでもできるけど、Perl,Ruby,PHP,Python 等のスクリプトの方がコンパイル不要で便利
    • good
    • 0
この回答へのお礼

引数を確認してみたところ、確かにおかしかったです。
それぞれのメソッドの機能もまともに理解出来てないので、やはり既存のアプリを使うことにします。

ありがとうございました。

お礼日時:2013/03/25 19:48

言語の知識も大事ですが、それよりもまずデバッグの技術を身につけましょう。


時間と労力の節約になります。

関数を呼び出してエラーが出てしまう場合、
まず関数に渡しているデータがおかしくないかをチェックしてください。
WebClient.DownloadFileメソッドにどういうデータを渡しているか、
コンソールに出力してみましょう。


for (int i = start; i <= end; i++)
{
s = i.ToString();
System.Net.WebClient wc = new System.Net.WebClient();
/**引数を見てみる**/
Console.WriteLine("Downloading from " + url.Replace(url, i.ToString(frm)));
/******************/
wc.DownloadFile(url.Replace(url, i.ToString(frm)), @"【ここには保存させたいフォルダのパスを入れます】" + s + ".jpg");
wc.Dispose();
Console.WriteLine(url, i.ToString(frm));
}

}

}
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!