- PR -

ファイルのコピーについて

投稿者投稿内容
XYZ
会議室デビュー日: 2003/12/07
投稿数: 11
投稿日時: 2004-02-05 11:54
いつもお世話になっております。
VB.NETでwebアプリケーションの開発を行っております。

別の端末上の特定のディレクトリにある複数のファイルを
ローカルにコピーしようとしているのですが、うまくいきません。
ソースは下記のようにしているのですが、実行すると、
コピー元のファイルが見つからない旨のメッセージが出ます。
(もちろん、ファイルはあります)

File.Copy("\\[端末名]\temp\test.txt", c:\test\test.txt, True)

上記でだめだったため、下記のソースでも試したのですが、結果は同じでした。

Dim path As String = "\\[端末名]\temp\test.txt"
Dim path2 As String = "c:\test\Test.txt"
Dim fi As FileInfo = New FileInfo(path)
Dim fi2 As FileInfo = New FileInfo(path2)
fi.CopyTo(path2, True)

コピー元の端末のディレクトリはEveryoneフルコントロールにしてあります。

過去ログ等を参考にし、machine.configも下記のように変更しました。
<processModel ... userName="system" password="AutoGenerate" ... />
(...の部分は、他の設定が記述されています)
userNameを自分のアカウント名にしたところ、プロジェクトそのものが起動できなくなったため、現在はsystemにしています。

ちなみに、コピー元のファイル名が特定できないケースもあるため、
コピー前にDir("\\[端末名]\temp\")も実行してみたのですが、
ファイル名を取得することができませんでした。

端末名をIPアドレスにしてみたり、\を/にしてみたりもしましたが、
現象は変わりませんでした。

ちなみに、windowsアプリなら上記の操作は問題ないのですが、
今回は諸々の事情により、Webアプリで行いたいのです。

まだ何か問題があるのでしょうか?
お心当たりの方がいらっしゃいましたら、教えて下さい。

宜しくお願い致します。


ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-02-05 12:36
引用:

XYZさんの書き込み (2004-02-05 11:54) より:

コピー元の端末のディレクトリはEveryoneフルコントロールにしてあります。


これはNTFSのセキュリティ設定ですか? 共有のセキュリティ設定ですか?
この場合、NTFSセキュリティ設定、共有セキュリティ設定の両方とも必要です。

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-02-05 12:37 ]
XYZ
会議室デビュー日: 2003/12/07
投稿数: 11
投稿日時: 2004-02-05 13:06
ぢゃんさん、回答ありがとうございます。
セキュリティの設定は両方ともEveryoneフルコントロールになっています。
あまり意味はないと思うのですが、念のため、自分のアカウントとASPNET、
systemも追加してみましたが、現象は変わりません。
他に何かお気づきの点がありましたら、教えて下さい。
宜しくお願い致します。
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-02-05 13:56
そうすると、コードアクセスセキュリティですかね……。
.NET Framework 1.1からの機能ですが、私も詳しくはないです。
(machine.configでtrustLevelとかの設定があります。)
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2004-02-05 14:35
るぱんです。
File.Copy("\\[端末名]\temp\test.txt", c:\test\test.txt, True)

"\\[端末名]\temp\test.txt"←このファイル見れてますか?
File.Copy("\\[端末名]\temp\test.txt", "\\[端末名]\temp\test1.txt", True)
File.Copy(c:\test\test.txt, c:\test\test1.txt, True)

試してみてください。
XYZ
会議室デビュー日: 2003/12/07
投稿数: 11
投稿日時: 2004-02-05 14:42
ぢゃんさん、ありがとうございます。
machine.configを確認したところ、下記のようになっていました。

<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal"/>
<trustLevel name="High" policyFile="web_hightrust.config"/>
<trustLevel name="Medium" policyFile="web_mediumtrust.config"/>
<trustLevel name="Low" policyFile="web_lowtrust.config"/>
<trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
</securityPolicy>
<!-- level="[Full|High|Medium|Low|Minimal]" -->
<trust level="Full" originUrl=""/>
</system.web>

いろいろ調べて、下記の方法も試してみました。

Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" ( _
ByVal SrcFile As String, _
ByVal DestFile As String, _
ByVal Exists As Long) As Long

ret = CopyFile("//[端末名(またはIPアドレス]/temp/test.txt",
        "c:/test/test.txt", False)

上記の方法でもコピーはされませんでした。
もしかして、この方法ではコピーできないのでしょうか?

XYZ
会議室デビュー日: 2003/12/07
投稿数: 11
投稿日時: 2004-02-05 14:52
るぱんさん、回答ありがとうございます。
Dir("\\[端末名]\temp\")で確認しましたが、ファイル名は取得できませんでした。
webアプリ以外なら問題無くファイル名を取得できます。
コピー元は共有ディレクトリにしているので、エクスプローラなどでも問題ありません。

コピー先の共有フォルダをネットワークドライブ(x:)として設定し、
端末名(またはIPアドレス)で指定している部分をx:\で指定もしてみましたが、
上手くいきませんでした。

ローカルのフォルダ間なら今までのどの処理でも問題ありません。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2004-02-05 15:48
るぱんです。

バッチファイルかEXEなんですかねぇ・・・?
ファイルをマシン外からコピーして来る手段・・・。うぅむ。。。

ネットワーク管理者から苦情がでかねない!?(汗)

スキルアップ/キャリアアップ(JOB@IT)