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

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

ただいまの
回答率

89.10%

パスワードのあるサーバー上のファイルの読み取りについて

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 733

Enginyaaa

score 12

C++にて、パスワードのあるサーバー上のファイルの読み取りを行いたいと考えています。

ご指摘いただいた部分について修正しました。

現状、プログラム上で呼び出したコマンドでは開けます。
.csvの実行(=エクセルの起動) : line A
データの表示 : line B

しかし、fstreamでは値の取得が出来ません。 : line D

最終的にはfstreamにて値の取得を行いたいのですが、どうすればよいのでしょうか。
ローカルファイルでは動作確認しています。(Windows 10 64bit)
どうぞよろしくお願いします。

以下ソースです。

#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <math.h>

#include <iostream>
#include <string>
#include <fstream>

using namespace std;


void main ( void ) {

    system ( "net use X:\\\\XXX.XX.XXX.XXX\\test /user:ユーザー名 パスワード" );// line A
    system ( "type X:\\test.csv "  );//line B
    std::ifstream ifs ( " X:\\test.csv " );//line C

    string str;
    if ( ifs.fail () ) {
        cout << "読み取れません" << endl;//line D
    }

    double a  = 0 ;
    while ( getline ( ifs , str ) ) {
            a = 0.0;
            sscanf ( str.data () , "%lf" , &a );
            cout << "a = " << a << endl;
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+1

Win32APIでユーザー&パスを指定して接続してからifstreamで開くとどうでしょうか?

共有フォルダへ接続する

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

こんにちは。

net useコマンドの構文が間違っているように見えます。どのドライブへ割り当てたのでしょうか?

現状、コマンドプロンプトでは開けますが、fstreamでは開くことが出来ません。

具体的にどのようなコマンドで開いたのでしょうか?
仮にnet useコマンドで x: へ割り当てたと仮定すると

type x:\test.csv

のようなコマンドではないでしょうか?
もし、YESなら、std::ifstream ifs("x:\test.csv");で開ける筈です。

ところで、system ( " \\\\XXX.XX.XXX.XXX\\test\\test.csv " );//コマンドは成功は、コマンドが記載されていませんので、test.csvファイルを実行しようとしていますが、本当に成功したのでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/05 14:14

    >net useコマンドの構文が間違っているように見えます。どのドライブへ割り当てたのでしょうか?
    ご指摘ありがとうございます。コマンドプロンプト上では「正常に終了しました」と出力されましたので問題と思っていましたが、指定が必要なのですね。

    >具体的にどのようなコマンドで開いたのでしょうか?
    system ( " \\\\XXX.XX.XXX.XXX\\test\\test.csv " );
    にて.csvの実行を行いエクセルの起動を確認しました。

    その他の点についても分かりやすいように修正を行いました。
    どうぞよろしくお願いいたします。

    キャンセル

  • 2019/07/05 14:39

    " X:\\test.csv " の前後の空白を取り除いてみたらどうなりますか?
    "X:\\test.csv"

    キャンセル

  • 2019/07/05 14:41

    あ、解決したのですね。ならば前後の空白の件は忘れて良いです。
    ただ、一般的には余計な空白は付けない方がトラブルに巻き込まれにくいと思います。

    キャンセル

0

ifstream で認証させる方法は分かりませんが sysytem でローカルにコピーしてそのフィルを読めばいいのではないでしょうか?

system ( "copy \\\\XXX.XX.XXX.XXX\\test\\test.csv  c:\\tmp\\test.csv" );//一時的にコピー
ifstream ifs (  "c:\\tmp\\test.csv" );//ストリームは成功するはず
・・・・
system ( "del c:\\tmp\\test.csv" );//最後に削除

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/05 14:17

    周期的に行う処理のつもりですので、頻繁な書き込みはできれば避けたいところです(泣)
    どうもありがとうございました。

    キャンセル

0

Chironian様の回答をもとに自己解決しました。

どうやらline Cでは開けていたものの、csvのテストデータが不完全であったため読み取れていなかったようです。

お騒がせしました。他の回答者様もありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる