[リストへもどる]
一括表示

投稿時間:2003/06/19(Thu) 14:02
投稿者名:H.K
URL :
タイトル:
Webフォルダへコピーしたい
初めての質問です。

ローカルで作成したファイルを社内のイントラネット(Webフォルダ)にエクスプローラで
コピーしています。これをVBで自動化にしたいのですが、どなたかやり方を知っていますか?
自分なりにいろいろ試みてはみたものの、ダメでした。

ローカルのファイルはテキストや圧縮ファイル(LZH)
コピー先のWebフォルダはHTTP://xxxxxx/yyyyy

投稿時間:2003/06/19(Thu) 19:15
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Webフォルダへコピーしたい
ひょっとしてファイルをアップロードしたいと言う事でしょうか?

>エクスプローラでコピーしています。
なら通常のコピー操作でできるはずですが、パスの指定が間違っているとかじゃない
でしょうか?

投稿時間:2003/06/23(Mon) 15:05
投稿者名:H.K
URL :
タイトル:
Re^2: Webフォルダへコピーしたい
> ひょっとしてファイルをアップロードしたいと言う事でしょうか?
そうです。

> なら通常のコピー操作でできるはずですが、パスの指定が間違っているとかじゃない
> でしょうか?

魔界の仮面弁士さんのアドバイスを参考に試行錯誤しています。
まだうまくいっていませんが・・・。

投稿時間:2003/06/20(Fri) 02:42
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: Webフォルダへコピーしたい
> ローカルで作成したファイルを社内のイントラネット(Webフォルダ)にエクスプローラで
> コピーしています。これをVBで自動化にしたいのですが、どなたかやり方を知っていますか?

Webフォルダ(WebDAV)へのアクセスには、幾つかの方法があります。

例えば、IE6 + Windows XP / Windows 2003などでは、
VB標準のステートメント等で、そのまま扱える可能性があります。
(Webサーバ側のサポート状況にもよりますが)

例えば、「http://server/folder」というWebフォルダがあった場合には、
    FileCopy "C:\Project1.DLL", "\\server\folder\ProjectSample.DLL"
という構文でファイルをコピーさせたり、あるいは、
    Open "\\server\folder\file.txt" For Output As #1
のような記述にて、ファイルを作成したりする事ができたりします。
ただし、この方法の場合は、http://〜やhttps://〜〜の構文のままでは
アクセスできないという点に注意が必要ですけれどね。

# なおこの時には、「http://server/folder/TEST.TXT」というURLに対して
# (WebDAVの)PROPFINDメソッドやPUTメソッドなどが自動的に発行されています。


上記の手法でアクセスできないような環境の場合は、ADOを使って、
Webフォルダをデータベースのように利用する事もできます。
特にADO 2.5以上からは、RecordオブジェクトやStreamオブジェクトを使って、
ファイルの内容までも、ADOだけで読み書きできるようになっています。

ADOで処理する場合は、OLE DB Providerとして、
  ・Microsoft OLE DB Provider for Internet Publishing (Provider=MSDAIPP.DSO)
  ・Microsoft OLE DB Provider for Exchange Server (Provider=ExOLEDB.DataSource)
などが利用できます。例えば前者であれば、
   http://www.microsoft.com/japan/developer/library/ado260/mdhowinternetpublishingscenario.htm
などが参考になるでしょう。後者は、
   http://www.zdnet.co.jp/help/howto/win/win2000/0010exchange/02/19.html
などを参考にしてください。(細かい仕様に関しては、SDKで確認してください)


あるいは、ServerXMLHTTPオブジェクトなどを利用して、直接 WebDAV による
低レベル通信を行う事もできます。この手法の場合は、下記が参考になるかと思います。
http://www.microsoft.com/japan/developer/workshop/xml/articles/xmlandwebdav.asp
http://www.ki.rim.or.jp/~kuro/WebDAV/

投稿時間:2003/06/25(Wed) 16:00
投稿者名:H.K
URL :
タイトル:
Re^2: Webフォルダへコピーしたい
> 例えば、「http://server/folder」というWebフォルダがあった場合には、
>     FileCopy "C:\Project1.DLL", "\\server\folder\ProjectSample.DLL"
やってみましたが、ダメでした。

> 上記の手法でアクセスできないような環境の場合は、ADOを使って、
> Webフォルダをデータベースのように利用する事もできます。
このようにやってみました。

Dim grec As Record
Dim grs As RecordSet
Dim strTest As String
Set grec = New Record
Set grs = New RecordSet
grec.Open "", "URL=http://Server/Folder/test.txt", , adOpenIfExists Or adCreateCollection
strTest = grec.CopyRecord("C:\test.txt","http://Server/Folder/test.txt")

しかし、これもダメでした。
エラーにはならないのですが、コピーされません。
やり方が間違えているのでしょうか?

投稿時間:2003/06/20(Fri) 12:01
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: Webフォルダへコピーしたい
Microsoft Shell Controls And Automationを参照設定して、
該当するFolderやFolderItemオブジェクトを得て、Folder.CopyHere
メソッドなどでコピーするとか。
# Webフォルダが、Shell名前空間に入っていることを利用します。

投稿時間:2003/06/23(Mon) 15:16
投稿者名:H.K
URL :
タイトル:
Re^2: Webフォルダへコピーしたい
> 該当するFolderやFolderItemオブジェクトを得て、Folder.CopyHere
> メソッドなどでコピーするとか。

申し訳ないのですが、具体的な例など(URL)あったら教えて下さい。

投稿時間:2003/06/23(Mon) 21:00
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: Webフォルダへコピーしたい
> > 該当するFolderやFolderItemオブジェクトを得て、Folder.CopyHere
> > メソッドなどでコピーするとか。
> 申し訳ないのですが、具体的な例など(URL)あったら教えて下さい。

MSDNライブラリで "FolderItem" を検索すると、各オブジェクトの仕様が見つかりますよ。
その仕様を参考にしながら、自力でコーティングしてみてください。

# もともと、Visual Basic や VBScript 向けに設計されているオブジェクトなので、
# ヘルプも VB (あるいはVBS, JScript等) 向けに書かれています。ただし、英語ですけれどね。


で。大雑把な流れとしては、こんな感じになります。

1. 『Microsoft Shell Controls And Automation』を参照設定している場合は、
    「Dim objShell As Shell32.Shell」、参照設定していない場合は
    「Dim objShell As Object」のように宣言しておきます。

2. Set objShell = CreateObject("Shell.Applicaion")、もしくは
   Set objShell = New Shell32.Shell にて、「Shellオブジェクト」を生成します。

3. Shellオブジェクトの「NameSpaceメソッド」で、目的のフォルダを指し示す
   「Folderオブジェクト」を取得します。

4. 上記 3 の処理により、コピー元ファイルのあるフォルダを示すFolderオブジェクトと、
   コピー先となるWebフォルダを示す Folderオブジェクトを取得します。

5. Folderオブジェクトの「Itemsメソッド」で「FolderItemsオブジェクト」を取得し、
   さらに、FolderItemsオブジェクトの「Itemプロパティ」で、コピーさせたい
   ファイルを指し示す「FolderItemオブジェクト」を取得します。

6. 『コピー先フォルダを示すFolderオブジェクト』の「CopyHereメソッド」の
   引数に、『コピー元ファイルを示すFolderItemオブジェクト』を渡して呼び出します。


これで、ファイルをコピーする事ができると思います。多分。

投稿時間:2003/06/25(Wed) 15:29
投稿者名:H.K
URL :
タイトル:
Re^4: Webフォルダへコピーしたい
英語のヘルプだとさっぱりでしたので、花ちゃんさんからのアドバイスを参考にやってみました。

Dim objShell as Shell32.Shell
Dim objFolder

Set objShell = New Shell32.Shell
Set objFolder = objShell.NameSpace("http://Srever/Folder")
objFolder.CopyHere "C:\Test.txt"

確かにコピーされました。しかし、コピー先がカレントディレクトリでした。

そこで、下記のことを確認すると・・・
Dim objFolderItem
Set objFolderItem = objFolder.Items
Debug.Print objFolderItem.Count
確かに「http://Server/Folder」にあるファイル数が表示されました。

Webフォルダを認識しているようですが、何か設定が違っているのでしょうか?

投稿時間:2003/06/24(Tue) 15:42
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: Webフォルダへコピーしたい
下記アドレスのスクリプトで使えるShellオブジェクト の中の Folder の中の CopyHere に
VBScriptのサンプルがあります。

# このページはリンクフリーです。
# このページのスクリプト及びソフトは、転載自由です。
となっておりましたが、直リンクしておりましたので下記に修正します。


 http://homepage2.nifty.com/pasocon/

投稿時間:2003/06/25(Wed) 15:14
投稿者名:H.K
URL :
タイトル:
Re^4: Webフォルダへコピーしたい
> 下記アドレスのスクリプトで使えるShellオブジェクト の中の Folder の中の CopyHere に
> VBScriptのサンプルがあります。

ありがとうございます。
参考になりました。