標記の件、Sharepoint上といったらいいのか、WebDAVといったらいいのか正確な表現がわかりませんが、
https://**** の場所(SharePoint上)にある ファイル/フォルダを操作したいのです。
uses
System.Types, IOUtils, Vcl.StdCtrls;
var
Path: String;
FolderList: TStringDynArray;
FolderName: String;
begin
Path := 'https://****.sharepoint.com/*****************'; //ここはすみません。伏字になります・・・・
FolderList := TDirectory.GetDirectories(Path, '*', TSearchOption.soTopDirectoryOnly);
for FolderName in FolderList do
begin
memo1.Lines.Add(FolderName);
end;
end;
といった感じでは「パスの形式がサポートされていません」エラーが出ます。
レベルの低い質問ですがご教示ください。
宜しくお願いします。
全く詳しくないのですが、WebDAVはwebというくらいで、ローカルと同じ方法ではアクセスできません。
ちょろっと検索してみた範囲では、
(1) TIdHttpなどでHTTPでアクセス
(2) WNetAddConnection2を使う
のどっちかのようです。(2)は例えばSOにこんな質問があがっています(XPはだめだけど7はOK、という内容のようですが参考にはなるかと)。
delphi - Mapping a network drive (WebDAV) doesn't work with Windows XP - Stack Overflow
https://stackoverflow.com/questions/11178480/mapping-a-network-drive-webdav-doesnt-work-with-windows-xp
HFUKUSHI さん、ありがとうございます。ネットワークドライブの割り当てを行えば、一時的に普通のドライブのように扱えるのですが、SharePointは割と不安定で、すぐにドライブ認証が外れてしまったりするのです。(セッションが時間で切れるような感じです)
アクセス前にネットワークドライブが使えるのか、使えないなら再度割り当てを行う というような方法で対処できるかトライします。
ご回答ありがとうございました。
※ Indyに IdWebDav っていうのがるのでどうにかできないものか色々探してはみましたが、ファイルを読み書きするような仕組みはわかりませんでした。。。
> SharePointは割と不安定で、
『SharePointは、Microsoft365、及びOffice365で提供されるサービスの一つで、
ファイル共有・情報共有を目的とした企業向けサービスの名称です。』
なんですね.
もしかしたら,delphi SharePoint のキーワードで検索すると何か情報が・・・
誤解していたらゴメンナサイ.
FormにTIdWebDAV、TButton、TMemoをドラッグドロップして、以下のソースコードで、
ローカルのApacheのWebDavにはファイルをアップロードできました。
正直、よくわかっていないのですが、ご参考まで。
procedure TForm1.Button1Click(Sender: TObject);
var
res: TStringStream;
strm:TMemoryStream;
b:TBytes;
begin
strm:=TMemoryStream.Create;
//UTF8文字列をWebDavにPUTする場合
b:=TEncoding.UTF8.GetBytes('UTF8の文字列を入れます'+#13#10+'2行目'+#13#10);
strm.Write(b,length(b));
//ファイルをWebDavにPUTする場合
//strm.LoadFromFile('a.jpg');
res := TStringStream.Create('');
try
//fill params
IdWebDAV1.URL.Username := 'user';
IdWebDAV1.URL.Password := 'pass';
IdWebDAV1.URL.Port := '80';
IdWebDAV1.URL.URI := '/dav/';
IdWebDAV1.URL.Host := 'localhost';
IdWebDAV1.URL.Protocol := 'PROPFIND';
//テキストファイルをアップロードする
IdWebDAV1.Put('http://localhost/dav/a.txt', strm, res);
//JPGファイルをアップロードする
//IdWebDAV1.Put('http://localhost/dav/a.jpg', strm, res);
//レスポンスを表示する場合
Memo1.Lines.Text := res.DataString;
finally
strm.Free;
res.Free;
end;
end;
FormにTIdWebDAV、TButton、TMemoをドラッグドロップして、以下のソースコードで、
ローカルのApacheのWebDavだと、ファイル一覧(ファイル名、サイズ、最終更新日時等の属性)をXMLで取得できました。
procedure TForm1.Button3Click(Sender: TObject);
var res,req: TStringStream;
begin
IdWebDAV1.Request.BasicAuthentication:=true;
IdWebDAV1.URL.Username := 'user';
IdWebDAV1.URL.Password := 'pass';
res := TStringStream.Create('');
IdWebDAV1.DAVPropFind('http://localhost/dav/',nil,res,'1',-1,-1);
//レスポンスを表示
Memo1.Lines.Text := res.DataString;
res.Free;
end;
mamさん、ありがとうございます。
特に2度目の回答、これがアクセスできたらすごくうれしいので今から試します。
Mr.XRAY さん、ご返答ありがとうございます。
うちの会社はコロナのせいか、Teamsの導入が一気に進み、あらゆる情報がTemas上(SharePoint上)での管理に移行しているんです。
かなり便利ですが、反面、SharePoint上のファイルへのアクセス利便性が今一つです。
SharePointはエクスプローラで表示させて、あたかもドライブやサブフォルダのように使えますが、しばらくすると認証を忘れてしまいます。(自動で再認証手続きに入ってくれないため、結局フォルダのように使えない)
MicrosoftのアプリなのでOSに有機統合してくれたら何も考えなくて済むようになるかもしれません。
mamさんに提示していただいた方法でトライしていますが今のところ成功しません
http://www.rei.to/carotdav.html
carotdav でも認証が通らないので、おそらく認証の肝心なところが理解できていないと思います(汗
ネットワークショートカットやネットワークドライブ割り当てはできるのになぁ・・・・
ごめんなさい、ご参考までですが、基本認証の場合は以下のようです。
procedure TForm1.Button3Click(Sender: TObject);
var res: TStringStream;
begin
IdWebDAV1.Request.BasicAuthentication:=true;
IdWebDAV1.Request.Username := 'user';
IdWebDAV1.Request.Password := 'pass';
res := TStringStream.Create('');
IdWebDAV1.DAVPropFind('http://localhost/dav/',nil,res,'1',-1,-1);
//レスポンスを表示
Memo1.Lines.Text := res.DataString;
res.Free;
end;
ツイート | ![]() |