ネットワークドライブでフォルダ作成時のNo.05716
tera-km さん 15/11/06 09:17
 
こんにちは、お世話になります。

ネットワークドライブにて新規フォルダ作成時にフォルダ名入力状態にならずに新規
フォルダーで確定してしまう時があります。その時はフォーカスも新規フォルダーに
当たりません。その場合、名前順でソートしていると今作った新規フォルダを探すが
厄介になります。
ご確認お願い致します。

再現方法がわかりませんが、一覧に表示しきれないフォルダで起こりやすい傾向があ
ると思われます。

1.115b1 64bit
win7pro64bit

[ ]
RE:05716 ネットワークドライブでフォルダNo.05718
秀丸担当 さん 15/11/06 13:53
 

うまく再現はできていないのですが、そうなる可能性はあると思います。
通常の新規フォルダの操作は、エクスプローラと同じファイル一覧背景から選ん
だことと同じになり、その反映は後から遅れて行われ、直前に行った操作と一致
すると名前変更状態になります。
そのためフォルダ内容が書き換えられたことがうまく検出できないと何らかの矛
盾が起きる可能性があります。

エクスプローラと同じではなく秀丸ファイラーが独自にフォルダを作ってしまえ
ばそういうことは起きないはずで、フォルダツリーのコンテキストメニューに
「新しいフォルダ」を追加して操作した場合はそうならないです。
ただ名前の付け方が独自になるのでWindows標準とずれる懸念もあります。
そういう方式に変更してしまうか、またはオプションで変えることができるよう
にするか検討します。

[ ]
RE:05718 ネットワークドライブでフォルダNo.05719
tera-km さん 15/11/06 17:21
 

>うまく再現はできていないのですが、そうなる可能性はあると思います。

OSの問題であれば特段のオプションは結構です。

以前に以下の日付情報を自動で入れたフォルダを作成するスクリプト?を作っていた
だきましたので、これの名前を確定せずに選択状態に変更可能であれば、常にこれを
使うようにすれば問題解決しますのでそれでokです。

可能であれば修正をお願いします。

  if( GetDirectory()=="" ){
     Message("パスがありません");
     EndMacro();
   }
   objFso = new ActiveXObject("Scripting.FileSystemObject");
   dateNow = new Date();
   strDate= ""
     +("000"+dateNow.getFullYear()).slice(-4)
     +("0"+(dateNow.getMonth()+1)).slice(-2)
     +("0"+dateNow.getDate()).slice(-2)
     +"-"
     +("0"+dateNow.getHours()).slice(-2)
     +("0"+dateNow.getMinutes()).slice(-2)
     +("0"+dateNow.getSeconds()).slice(-2)
     ;
   strName=strDate;
   cmax=1000;
   for( i = 1; i <= cmax; i ++ ) {
     strFull = GetDirectory() + "\\" + strName;
     if( !objFso.FileExists( strFull )
      && !objFso.FolderExists( strFull ) ) {
       objFso.CreateFolder( strFull  );
       break;
     }
     strName=strDate+"("+i+")";
   }
   if(i<cmax){
     Refresh();
     SelectItem( strName, 2 );
     //名前の変更状態にするとしたら…
     //Command("名前の変更");
   } else {
     Message("失敗");
   }

[ ]
RE:05718 ネットワークドライブでフォルダNo.05844
tera-km さん 16/01/04 10:05
 
あけましておめでとうございます。
本年もよろしくお願い致します。

古い話を蒸し返して恐縮ですが、自分なりに挙動を見てきたのですが、少なくとも私
の環境ではエクスプローラーでは問題は起きたことはありません。

秀丸ファイラーでは、かなりの頻度で再現します。ネットワークドライブ上でのフォ
ルダの新規作成はそこそこの頻度で使用しますので、エクスプローラーと同レベルに
して欲しいところです。ご検討お願い致します。

Ver1.20 B6 64bit
win7pro 64bit


[ ]
RE:05844 ネットワークドライブでフォルダNo.05846
秀丸担当 さん 16/01/05 15:52
 

現状はエクスプローラと同等のフォルダ作成を指示しますが、できたフォルダ名
の結果を知る方法はWindowsには用意されていないので、監視によって結果的に
知るため、うまくいかない可能性があるという意味でした。

それを、最初からフォルダ名を指定して全て自前でやればできるのですが、やは
りそういう方法はあったらいいということで、今後検討したいと思います。

ただフォルダ名の命名規則はWindowsによっても違っていて確実に同じ命名規則
にできない場合があることになると思います。

[ ]
RE:05846 ネットワークドライブでフォルダNo.05847
tera-km さん 16/01/06 10:16
 
こんにちは、返答ありがとうございます。

お答えいただいたことがこちらの質問の主旨と合っているのかが理解できないので、
改めて問題点をあげます。

事象)ネットワークドライブにて新規フォルダー作成時に、通常時は「新規フォル
ダー」となってフォルダー名未確定の状態となりますが、「新規フォルダー」確定状
態になる場合がある。当該事象は画面に収まりきらないぐらいにフォルダ、ファイル
数が多い場合に起こりやすい。(と、いうより少ないと起こらないと思われ、画面の
書き換えが起こった時に発生しているように見受けられます)

要望)
1)当該事象はエクスポローラーでは起こりませんので、エクスプローラーと同等に
していただきたい。

2)対処が難しければ、それに準ずるようなフォルダ名未確定のスクリプトでも構わ
ないのでご教授頂けると助かります。

以上、よろしくお願い致します。


[ ]
RE:05847 ネットワークドライブでフォルダNo.05848
秀丸担当 さん 16/01/06 14:35
 

全て独自にすれば可能なので、独自にする方法を検討したいと思います。

以前のスクリプトを、日付とかを無くして名前の変更状態にするとしたら、以下
のようなスクリプトにするといいです。

  if( GetDirectory()=="" ){
     Message("パスがありません");
     EndMacro();
   }
   objFso = new ActiveXObject("Scripting.FileSystemObject");
   strName="新しいフォルダー";
   cmax=1000;
   for( i = 2; i <= cmax; i ++ ) {
     strFull = GetDirectory() + "\\" + strName;
     if( !objFso.FileExists( strFull )
      && !objFso.FolderExists( strFull ) ) {
       objFso.CreateFolder( strFull  );
       break;
     }
     strName="新しいフォルダー ("+i+")";
   }
   if(i<cmax){
     Command("ファイル一覧にフォーカス");
     Refresh(1);
     SelectItem( strName, 2 );
     Command("名前の変更");
   } else {
     Message("失敗");
   }

[ ]
RE:05848 ネットワークドライブでフォルダNo.05849
tera-km さん 16/01/06 17:29
 

>全て独自にすれば可能なので、独自にする方法を検討したいと思います。

よろしくお願い致します。


ご教授いただいたスクリプトで問題解決できました。
ありがとうございました。


[ ]
RE:05848 ネットワークドライブでフォルダNo.05861
tera-km さん 16/01/21 13:45
 
こんにちは、お世話になります。

>全て独自にすれば可能なので、独自にする方法を検討したいと思います。


最新の V1.20β8を公開しました。にある、改版履歴で

>・ネットワーク上の新しいフォルダコマンドは同期して処理するように方式変更。

が当該問題についてのことだとすると、結論、症状は再現されます。

当方の環境でしか再現されないようなので、とりあえずご報告いたしますが、先に頂
いたスクリプトで対処できているので、私自身はこれ以上の検討についてはどちらで
も構いません。

[ ]
RE:05861 ネットワークドライブでフォルダNo.05863
秀丸担当 さん 16/01/21 17:30
 

確かに修正はこの件に関することでしたが、うまくいっていないということで申
し訳ありません。
内部的な処理とスクリプトによる処理で違う点が無いか調べて、原因が分かり次
第、また修正したいと思います。

[ ]
RE:05863 ネットワークドライブでフォルダNo.05864
hp さん 16/01/26 17:20
 
横からですみません。

この症状は私でも起こっております。

エクスプローラ本体でもそうですが、常々CreateDirectory(新しいフォルダ)してか
らMoveFile(入力したフォルダ名)するのは冗長だと思っており、とくに重いネット
ワークでは処理が2回になることが致命的です。

Officeの保存ダイアログのように、独自のフォルダ作成ウィンドウを作って、Create
Directory(入力したフォルダ名)してくれる機能を追加していただけないでしょうか?

[ ]
RE:05864 ネットワークドライブでフォルダNo.05865
秀丸担当 さん 16/01/27 09:01
 

新しいフォルダの動作そのものについては次のβ版でまた修正してみます。
ダイアログで入力してからフォルダを作成するというコマンドもあったらいいと
いうことで、ご意見参考にさせていただきます。

現状でやるとしたらスクリプトを作る方法が考えられます。

以下のスクリプトを例えば c:\folder\newfolder.vbs というファイル名で保存
し、リンクバーやツール項目バーの項目を作り、「パス」の内容を
vbs:c:\folder\newfolder.vbs
というようにすると、スクリプトが実行されます。

set objFso=CreateObject("Scripting.FileSystemObject")
strName=InputBox("新しいフォルダ名")
If strName <> "" Then
If GetDirectory() <> "" Then
objFso.CreateFolder GetDirectory() + "\" + strName
Refresh
SelectItem strName, 2
End If
End If

[ ]
RE:05865 ネットワークドライブでフォルダNo.05867
hp さん 16/01/28 13:22
 
スクリプトで目的のことができました。
ありがとうございました。

[ ]