dev.K
(dev.k)
October 31, 2024, 1:13am
1
Windowsレガシ→Windowsへの移行を現在行っているのですが、UNCパス(SharePoint)を指定したFolder Copyアクティビティが動作しなくなったため、事象の解決方法や回避方法を模索しています。元々は動作していたロジックだったため、移行にに伴う影響が高いと考えています。
エラーの内容としては、「illegal characters in path」となっております。
パスの形式としては、「\XXXXX\XXXX\XXX\XXX\」のような形式となっております。
Cドライブ等の一般的なパス間でのフォルダ移動は問題なく出来ているため、UNCパスに限定した事象と考えています。
回避策としては、以下を検証しそれぞれエラーとなっています。
①Invoke Methodを利用したCopyDirectoryでのフォルダ移動
→同様のillegal~のエラーが発生
②Invoke Codeを利用したMicrosoft.VisualBasic.FileIO.FileSystem.CopyDirectoryでのフォルダ移動
→ComputerはMyのメンバーではありませんとエラーが発生
以下の方法は、導入環境の都合対応が厳しいため最終手段としたいです。
①’SharePoint関連のアクティビティパッケージ追加
②’ドライブの割り当てをしてUNCパスの変更
どうしても厳しいようであれば、フォルダの作成/削除とファイルの移動はUNCパス指定でも何とかできそうなので、空のフォルダを作成→ファイルをすべて移動→元フォルダの削除という力技で対応しようかと考えています。
ただ、改修コストが上がるのと、処理リスクが高いので何か他に解決方法あればご教示いただければ幸いです。
よろしくお願いします。
Yoichi
(Yoichi)
October 31, 2024, 1:30am
3
あとは、UNC表現の問題か否かの切り分けのため以下の式の結果を確認した方が良いかと思います。
System.IO.Path.GetInvalidPathChars().Any(Function(c) filepath.Contains(c))
もしTrueが返るなら、何か不正な文字が含まれていると思います。
2 Likes
dev.K
(dev.k)
October 31, 2024, 1:51am
4
@Yoichi
いつも迅速かつ具体的なアドバイスいただきありがとうございます。
1つ目のInvokeCodeの内容を試してみたところ、Exception has been throw by the target of an invocationのエラーが発生しております。引数も入力方向や型も含め正しく登録しているのでなぜこうなるのか分かり兼ねております。。
2つ目の内容を試してみたところ、Trueが返ってきましたのでご指摘の通り、不正文字列が入っているのだと思います。ただ、同一シナリオをレガシで動かしたところ正常に機能するため対応OSをレガシからWindowsに切り替えたことで不正扱いとされた文字列がありそうです。
追加の質問となり恐縮ですが、どの文字列が不正扱いとなったか確認する方法ご教示いただけないでしょうか。
Yoichi
(Yoichi)
October 31, 2024, 2:26am
5
1はエラー発生時にローカルパネル内の$exceptionDetailsの中身を確認ください
2は取り急ぎ以下の式を確認ください
String.Join(",",(filepath.Where(Function(c) System.IO.Path.GetInvalidPathChars().Contains(c))).Select(Function(c) AscW(c)))
1 Like
Yoichi
(Yoichi)
October 31, 2024, 2:37am
7
バックスラッシュはInvalidPathCharsには入っていないはずです。
String.Join(",",(filepath.Where(Function(c) System.IO.Path.GetInvalidPathChars().Contains(c))).Select(Function(c) AscW(c)))
の結果共有できませんでしょうか?
dev.K
(dev.k)
October 31, 2024, 2:54am
8
試してみたところ、結果は何も帰ってきませんでした。
スペースやヌル文字なども確認できない文字通り「無」が返されている状況です。。
Yoichi
(Yoichi)
October 31, 2024, 2:58am
9
妙ですね。
2つ目の内容を試してみたところ、Trueが返ってきましたのでご指摘の通り、不正文字列が入っているのだと思います。
と状況が一致していないです。
もしファイルパス名を公開しても問題ないのであれば
String.Join(",",(filepath.Select(Function(c) AscW(c))))
こちらの出力内容を共有いただければと思います。
dev.K
(dev.k)
October 31, 2024, 3:18am
10
失礼しました。
2つ目の内容を試してみたところ、Trueが返ってきましたのでご指摘の通り、不正文字列が入っているのだと思います。
この部分ですが、入力内容誤っていたようで修正したところFalseになりました。
つまり不正文字列はないもののフォルダ移動が出来なくなっているという事ですよね。。
パスの公開は厳しいですがいただいた内容を入力して文字コードは出力できました。
フォルダ名に登録できないものや特段怪しそうな記号はなさそうでした。
Yoichi
(Yoichi)
October 31, 2024, 3:37am
11
どうも以下で報告されている事象と一致してそうです。(対象もSharepointのようなので)
We are trying to convert all of our processes to Windows projects from Windows Legacy.
I have a path, what was working in Legacy project, but it doesn’t want to work in Modern.
The error is:
Illegal characters in path. (Parameter ‘path’)
The path looks like this \\collaboration.mykuka.com\xy\Org\Folder (I replaced part of the real path here, doesn’t really matter the text, as it has only letters from the English alphabet.
Does anyone has a solution for this?
残念ながら、解決には至っていなさそうですが...。
2 Likes
dev.K
(dev.k)
October 31, 2024, 3:47am
12
各種ご確認いただきありがとうございました!
他にもSharePoint×対応OSWindowsで不可解なエラー連発しているので、
SharePointとの相性はちょっと良くなさそうですね。。
※他にもDirectoryGetfilesでファイル一覧を取るとヌル文字がくっついてくるなど発生していました。
一旦、他に解決方法なさそうであれば力業で回避しようと思いますmm