• ベストアンサー

共有フォルダ名のパスの取得

お世話になります。 C++ 6.0 MFCで開発しております。 自分の共有フォルダ名から、その共有フォルダのパスを取得したいのですが それができるような関数はあるのでしょうか? 大変お手数ですが、何卒よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> Windows98に対応していない事や 関数の定義に違いがありますが、対応していないわけではありません。 Windows95のSvrapi.dllにNetShareEnum関数があることは確認しました。 NT系と95系両方に対応するためには、ヘッダーファイルをインクルードせずに、LoadLibraryでdllファイルを読み込んで、GetProcAddressで関数のポインタを得る必要があります。使用する構造体も別途定義しなければなりません。 > LPWSTR→CStringに変換する時、なんかPC側で、似たような字に変換される可能性があるとも聞いたのです パスにUNICODEにしかない文字があれば、変換せざるを得ません。しかし、UNICODE文字列として扱わない限り、どんな方法でパスを取得しても、変換がかかるのは同じです。 他の方法として、レジストリから取得する方法もありますが、正規の方法ではないため、将来的に使えなくなる可能性があります。また、NT系と95系でレジストリの場所が違いますし、NT系の管理共有等は記述されていません。

その他の回答 (3)

回答No.3

CString strPath((LPWSTR)BufPtr->shi502_path); としたらstrPathに取り出せませんか?

kgyqk433
質問者

お礼

ご返事ありがとうございます。 CString strPath((LPWSTR)BufPtr->shi502_path); ですが、Windows98に対応していない事や、インストールの時に 必要なライブラリもいっしょにいれないといけないとお聞きしたのです。。 ※LPWSTR→CStringに変換する時、なんかPC側で、似たような字に変換される 可能性があるとも聞いたのです。。 ご返事ありがとうございます。

回答No.2

UNICODEに対応していなくても、MFC使っているならCStringにLPWSTRを渡せばいいだけだと思いますが。

kgyqk433
質問者

お礼

res = NetShareEnum (lpszServer, 502, (LPBYTE *) &BufPtr, -1, &er, &tr, &resume); のBufPtrで取得したのですが、BufPtr内のパス先・フォルダ名をデバックで中を見たらその時点で文字が化けていたのです。。。。

回答No.1

こちらのサンプルコードは確認されましたか? NetShareEnum 関数 http://msdn.microsoft.com/ja-jp/library/cc446966.aspx

kgyqk433
質問者

お礼

ご返事ありがとうございます。 実は、現在のプログラムがUNICODEに対応していなくて NetShareEnumを使うと文字化けを使わない方法で作成したのです。 その際に、共有フォルダ名までは取得できたのですが、 そのパス名の取得方法がわからないのです。 お手数ですがよろしくお願いします。

関連するQ&A

  • 今実行しているコンピュータの共有フォルダを取得したい

    お世話になります。 C++ 6.0 MFC で開発しております。 今A.exeというアプリケーションを実行しているコンピュータが かけている共有フォルダを全て取得したいのですが、そのような関数は あるのでしょうか? お手数ですが、何卒よろしくお願いします。

  • ExcelVBAで前後のパスとパス名を取得したい。

    Excel2000のVBAで現在いるフォルダの前後のフォルダ名とパス名を取得したいです。(できればさらに何階層か前後のフォルダも)取得できる関数はありますでしょうか。無ければ何かいい方法を教えてほしいです。お願いします。

  • 共有フォルダのパス名の表示

    初歩的な質問ですみません。パス名を表示するとき、頭にドライブ名をつけますが、共有フォルダの場合、どのように書けばよいのでしょうか。 例えば、自分が編集した文書が、 共有フォルダ[home]中の[10_フォルダA]の中の[20_フォルダB]の中に入っています ということをメールで伝えたい場合、 ¥home¥10_フォルダA¥20_フォルダB でよいのでしょうか。よろしくお願い致します。

  • パス名の変換

    フォルダ選択ダイアログで取得したパス名 ex.c:\program files を関数で使おうとすると c:\\program files に直すようだと分かったのですが 何かいい関数、もしくは方法はないでしょうか? よろしくお願いします

  • FileSystemObjectでのパス名の取得

    お世話になります。 VBScriptでフォルダ内のファイルコピーのスクリプトを作っているのですが、FileSystemObjectを使用してネットワーク共有してある日本語のフォルダ名(Getfolder)を取得すると文字化けして取得できません。 Dim fso,fo set fso = CreateObject("Scripting.FileSystemObject") set fo = fso.getfolder(フォルダパス) WScript.Echo fo.path <---フォルダのパスを表示 なにか解決する方法はありますでしょうか? ちなみに、ローカルドライブの日本語フォルダは正常に取得できました。

  • フォルダ名のフルパスからファイルポインタ

    C言語の初心者で、なにがなんだかわかりません。 ファイル入出力関数の話ですが、 フォルダ名のフルパスを指定された関数内で ファイルポインタを指定して他関数を使用します。 そもそもフォルダ名のフルパスからファイルポインタを 得ることができるのでしょうか?

  • LBoundでフォルダ名を取得したい。

    マクロで、フォルダ名を取得したいのですが、 どのように取得すればよいでしょうか? ThisWorkbook.Pathでパスを取得して \C:\***\△△△\○○○\XXX.xls だとすると、「△△△」だけを入力したいのです。 「△△△」は必ずCドライブから2階層下に あります。 パス名 = ThisWorkbook.Path tmp = Split(パス名, "\") MsgBox tmp(LBound(tmp)) としたところ「D」とうドライブ名が取得できたので MsgBox tmp(LBound(tmp,2))としてみたのですが、うまく 「△△△」の部分が取得できません。 よろしくお願いいたします。

  • システムの特殊なフォルダのパス名の取得を取得しようとしています。

    システムの特殊なフォルダのパス名の取得を取得しようとしています。 VC++2008 Express EditionでSHGetSpecialFolderPathをつかって パスを取ってみようとネット上の例だから拝借して 下記のようなソースを書いてみたのですが、 出てくる結果が、どの場所のパスをとっても「C」しか出てこないのです。 これってなにが原因なのでしょうか? どなたかお教え願えないでしょうか? [ソース] #include<stdio.h> #include<shlobj.h> int main(){ TCHAR buf[_MAX_PATH]; SHGetSpecialFolderPath(NULL, buf, CSIDL_DESKTOPDIRECTORY, FALSE); printf("デスクトップのパスは %s です\n",buf); return 0x00; }

  • フォルダ名とパス名の違うフォルダの作り方

     例えば、C:\Documents and Settings\<ユーザー名>\My Documents\My Pictures の場合、一番最後のサブフォルダ名が、[My Pictures] とパス名と同様に適用されます。  これを上記の場合、[マイ ピクチャ] になります。  こんな感じに、フォルダ名とパス名の違うフォルダの作り方を教えて下さい。

  • 共有したフォルダのパス

    共有したフォルダのフルパスを教えてください。

専門家に質問してみよう