質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

4回答

2148閲覧

C# サーバー上のcsvファイルをダウンロード

kn0607phno

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/03/20 01:48

編集2022/01/12 10:55

y_waiwaiさん、回答ありがとうございます。
より具体的な情報を質問文に追記します。
IISサーバー環境で、クライアントPCからの操作で、サーバーの「http://aaaa/bbb/ccc.csv」ファイルをクライアントPCにダウンロードしたいのですが。


以下のコードを自分のPCのデバッグ環境で実行すると自分のPCのc:\aaaフォルダにbbb.csvがダウンロードされるのですが、サーバーにセットアップした環境で実行すると、エラーが発生します。

System.Net.WebClient wc = new System.Net.WebClient();
wc.DownloadFile("http://aaaa/bbb/ccc.csv", @"c:/aaa/bbb.csv");
wc.Dispose();

エラー内容は、try-catchで取得した内容となりますが、以下になります。
ex.Message --->「WebClient 要求で例外が発生しました。」
ex.InnerException.Message --->「パス 'c:\aaa\bbb.csv' の一部が見つかりませんでした。 」

どなたか何が原因と解決方法を教えて頂きたいのですが。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

c:\aaa が無いかアクセス権が無いのでは?

投稿2018/03/20 01:53

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kn0607phno

2018/03/20 02:30

Zuishinsann,回答ありがとうございます。 ローカルPCに「c:\aaa」のフォルダは作成しております。 アクセス権の事はよくわからないのですが、ローカルPCに「c:\aaa」のフォルダに、Everyoneの権限にフルコントロールを設定しております。他にインターネットユーザーの匿名みたいな認証が必要なのでしょうか? また、IISの「http://aaaa/bbb」のフォルダは、匿名認証を有効に設定しました。
Zuishin

2018/03/20 02:43

ダウンロードできたならそれでいいのでは? 第二引数でローカルの名前を指定しているのでリネームされただけでしょう。
kn0607phno

2018/03/20 03:01

サーバーからサーバーにダウンロードされているので、こちらのやりたい事とは異なります。 y_waiwaiさんの進言通り、質問文に追記しました。 以下です。 IISサーバー環境で、クライアントPCからの操作で、サーバーの「http://aaaa/bbb/ccc.csv」ファイルをクライアントPCにダウンロードしたいのですが。 何かヒントとなる事などありますでしょうか? リネームされました!
Zuishin

2018/03/20 03:03

サーバーで動かすとそうなります。 クライアント PC で動かしてください。 というよりそのようにダウンロードをリクエストする端末をクライアントと呼びます。
Zuishin

2018/03/20 04:02 編集

つまりローカルでデバッグした時にはローカルにダウンロードされ、サーバー上にセットアップしてサーバー上で動かしたい場合にはサーバーにダウンロードされるという問題ですが、それは問題でもなんでもなく当然の結果です。 クライアントにダウンロードしたいのであればクライアントで動かす以外にありません。 サーバーから勝手にクライアントを操作できません。 それでもサーバーからクライアントを操作したい場合には、それを可能とするサーバーアプリをクライアント上にインストールし、そのサーバーアプリと接続するクライアントアプリをサーバーにインストールし、クライアントをサーバーに、サーバーをクライアントにするという手順がまず必要になります。
kn0607phno

2018/03/20 04:29

クライアントPCで動かすというとjavascriptでしょうか?! ボタンクリック時にダウンロードされるように、ボタンに「OnClientClick="xxx()"」を追加しました。 javascriptのプログラムコードとしては、以下です。 が、実行すると、3行目で、 「重大な JavaScript エラーが検出されました\n\nSCRIPT1004: ';' がありません。」 1<script type="text/javascript"> 2 function aaa() { 3 sys.Net.WebClient wc = new sys.Net.WebClient(); 4 wc.DownloadFile("http://fannie/kngtkotei/テプラ/金型情報シール.csv", "c:/aaa/bbb.csv"); 5 wc.Dispose(); 6 } </script>
Zuishin

2018/03/20 04:33

C# で作ってるなら C# でいいでしょう。 ついでにそのエラーは単なる文法エラーです。
kn0607phno

2018/03/20 04:38

迷走しています。
kn0607phno

2018/03/20 06:22

改めて質問させて下さい。 以下のC#のコードをクライアントで動かすには、どのような記述をすれば良いのでしょうか? System.Net.WebClient wc = new System.Net.WebClient(); wc.DownloadFile("http://aaaa/bbb/ccc.csv", @"c:/aaa/bbb.csv"); wc.Dispose(); 回答をよろしくお願いいたします。
Zuishin

2018/03/20 06:52

何に困っているのかわかりませんがアプリケーションを作ったことがないならここで断片的に聞くより適当な入門書を買ってきて読んだ方が早いと思います。 自分の PC のデバッグ環境で期待通り動作しているとのことなので、それでできているはずです。 ビルドして実行すればいいのでは?
kn0607phno

2018/03/20 08:21

ここの回答を頂いて、デバッグ環境でも思い通りには動いてない事がわかりました。 勘違いしてました。 「C# で作ってるなら C# でいいでしょう。」回答いただいており、 こちらもC#で作りたいと思っておりますが、C#内でjavascriptのコードを記述するような書き方の事を言っているのでしょうか?
Zuishin

2018/03/20 08:49

Javascript のコードを記述というのが何のことかわかりませんが C# でなく Javascript でも当然できますので、そちらの方が得意ならそちらで作ればいいかと。
guest

0

「サーバーにセットアップした環境」に、 C:\aaa というフォルダがないのかもしれません。


状況がよくわからないので整理すると(できてるかな?)……。

vb

1[ A:kn0607phnoさんのPC ]----[ B:サーバー (IIS動作中) ]

こういう環境下で、Bのサーバーにて http://aaaa/bbb/ccc.csv というURLでCSVが公開されている。
kn0607phnoさんが作ったプログラムを、
①AのPCからVisual Studioでデバッグで動かすと、AのPCの C:\aaabbb.csv が保存される
②Bのサーバー上で動かすと、「WebClient 要求で例外が発生しました。」等の例外が発生する
③ただしBのサーバーに C:\aaa というフォルダを作ってから動かすと、例外にはならずBのサーバーの C:\aaabbb.csv が保存される

やりたいことは、
任意のPCからの何らかの操作により、任意のPCの C:\aaabbb.csv が保存されるようにしたい。

で、あってますか?
あっているにせよあっていないにせよ、そのあたりを質問に追記していただけるとわかりやすいかと思います。

投稿2018/03/20 01:52

編集2018/03/20 03:55
alg

総合スコア2019

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kn0607phno

2018/03/20 02:23

algさん、Zuishinsann,回答ありがとうございます。 サーバー環境に「c:\aaa」のフォルダを作成したところ、エラー発生せずにbbb.csvがダウンロードされました! しかしながら、やりたい事とは異なりまして。 やりたい事は、サーバーの「http://aaaa/bbb/ccc.csv」ファイルをローカルPCにダウンロードをしたいのです。 DownloadFileの第2引数の指定に問題があるのでしょうか?
kn0607phno

2018/03/20 04:15

algさん、ご指摘ありがとうございます。 やりたいことは、 「任意のPCからの何らかの操作により、任意のPCの C:\aaa に bbb.csv が保存されるようにしたい。」 であっております。 Zuishinさんの言うように、javascriptなどでコードを作れば動作するのでしょうか?
alg

2018/03/20 04:34

「任意のPC」にプログラムをインストール&実行可能  →kn0607phnoさんが作ったプログラムをインストール&実行すればよい 「任意のPC」にプログラムをインストール不可・ブラウザからの操作でローカルの "C:\aaa\bbb.csv" に保存したい  →JavaScript となりそうですね。
alg

2018/03/20 07:21

でもJavaScriptで"C:\aaa\bbb.csv"に「必ず」保存する、というのは無理かもしれません。 "bbb.csv"という名前のファイルを、ユーザーが保存先を選んで保存する、というのはできそうですが。
guest

0

Web サーバーがどうなっているか不明ですが、「自分のPCのデバッグ環境」では IIS Express、「サーバーにセットアップした環境」では IIS だとすると、アクセス権が違うということは認識されてますか?

匿名アクセスの場合、IIS Express は Visual Studio を起動したユーザーアカウント(管理者?)、IIS は NT AUTHORITY\IUSR になります。

NT AUTHORITY\IUSR に読み取り権限が必要ですが、そこはどうなんでしょう?

投稿2018/03/20 03:29

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kn0607phno

2018/03/20 04:21

SurferOnWwwさん、ご回答ありがとうございます。 「自分のPCのデバッグ環境」では IIS Expressを「ローカルIIS」にしております。 「サーバーにセットアップした環境」では IISで、アクセス権が違うということは認識していません。 クライアントPCの「c:\aaa」フォルダに権限が必要なのでしょうか?
退会済みユーザー

退会済みユーザー

2018/03/20 05:27 編集

> クライアントPCの「c:\aaa」フォルダに権限が必要なのでしょうか? CSV ファイルは Web サーバー (IIS) の仮想ディレクトリ/アプリケーションにあって、クライアント PC から要求を受けると IIS がそのファイルを読み出してきてクライアント PC に送信するのですよね? であれば違います。 上に書いた「そのファイルを読み出してきて」ということを行うには、IIS が読み取り権限を持ってないとダメなのは分かりますか? そういうことを言っているのです。
退会済みユーザー

退会済みユーザー

2018/03/20 09:22

> IISの設定に読み取り権限を付加するところがあるのでしょうか? IIS ではなくて、Windows のエクスプローラー(IE ではないですよ)で CSV ファイルがあるフォルダを右クリックしてプロパティを開きその[セキュリティ]タブで設定するのです。 その前に、クライアント PC の IE のアドレスバーに Web サーバーの当該 CSV ファイルの url を入力して要求をかけて、CSV ファイルはダウンロードできるのは確認したのですか? ダウンロードできるのであればアクセス権の問題いはないので私のレスは忘れて良いです。
guest

0

なんかよーわからんけど、サーバからの操作(だけで)ローカルマシンにファイルをコピーしたいということかな?

まずはそこらへんの仕様をはっきりしましょう。
また、そのサーバというのはどういうものか、サーバとローカルの接続はどうなってるのか、ということも具体的に提示してください

そこらへんの具体的な情報を質問文に追記してくださいね

投稿2018/03/20 02:40

編集2018/03/20 02:42
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kn0607phno

2018/03/20 03:02

質問文に追記しました。 確認して下さい。回答をお願いいたします。
y_waiwai

2018/03/20 03:20

まず、ローカルマシン上で、ブラウザ(IEとかFirefoxとか)を立ち上げ、アドレス欄に http://aaaa/bbb/ccc.csv を入れたらどういう表示になりますか?
kn0607phno

2018/03/20 04:07

【ccc.csvを「開く」か「保存」か「名前を付けて保存」】のポップアップ画面が表示されます。
y_waiwai

2018/03/20 04:10

それで保存できるなら、そのC#のコードで保存できませんか?
y_waiwai

2018/03/20 04:39

いやだから、ブラウザでそのURL入れたらダウンロードできるんでしょ? なら、あなたが書いたそのC#のコードでもダウンロードできるはず、というはなしなんだけど。 そのコードを実行したらどうなりますか?
kn0607phno

2018/03/20 04:46

そのコードを実行したらどうなりますか? の、そのコードとは、以下のコードでしょうか? System.Net.WebClient wc = new System.Net.WebClient(); wc.DownloadFile("http://aaaa/bbb/ccc.csv", @"c:/aaa/bbb.csv"); wc.Dispose();
y_waiwai

2018/03/20 04:53

それです。 って、それしたいからここでやってるんではw
kn0607phno

2018/03/20 05:07

最初の質問の抜粋です。 「WebClient 要求で例外が発生しました。」が発生します。 ちなみに、デバッグ環境では思い通りの動作をしてくれて、 IISサーバーにセットアップした環境で「WebClient 要求で例外が発生しました。」が発生しまふ。 -------------------------------- 以下のコードを自分のPCのデバッグ環境で実行すると自分のPCのc:\aaaフォルダにbbb.csvがダウンロードされるのですが、サーバーにセットアップした環境で実行すると、エラーが発生します。 System.Net.WebClient wc = new System.Net.WebClient(); wc.DownloadFile("http://aaaa/bbb/ccc.csv", @"c:/aaa/bbb.csv"); wc.Dispose(); エラー内容は、try-catchで取得した内容となりますが、以下になります。 ex.Message --->「WebClient 要求で例外が発生しました。」 ex.InnerException.Message --->「パス 'c:\aaa\bbb.csv' の一部が見つかりませんでした。 」 どなたか何が原因と解決方法を教えて頂きたいのですが。 よろしくお願いいたします。 --------------------------------
y_waiwai

2018/03/20 05:17

それでは、そのコードはなにを使って作ってますか?そして、どうやって実行しようとしていますか?
kn0607phno

2018/03/20 05:21

visualstudioで作っています。 IISサーバー環境で実行しています。
y_waiwai

2018/03/20 05:26

IISサーバで実行とは?具体的になにをどうやってますか?
y_waiwai

2018/03/20 05:43

えーと、話がわからないですが、そのC#のコードはどこに入りますか?
kn0607phno

2018/03/20 07:59

サーバーですね! デバッグ環境でも、思い通りには動いてないですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問