◀一般トップへ
  • 8134 読み取り専用だがエディタ上では編集可能な状態でファイルを開くには
    • 8135 Re:読み取り専用だがエディタ上では編集可能な状態でファイルを開くには
      • 8138 上書きは不可、かつエディタ上では編集可能な状態にするには
        • 8139 Re:上書きは不可、かつエディタ上では編集可能な状態にするには
          • 8142 Re2:上書きは不可、かつエディタ上では編集可能な状態にするには
            • 8147 THX!
  • [8134] 読み取り専用だがエディタ上では編集可能な状態でファイルを開くには たんぶる 2016年03月26日 17:52

    どのような方法がありますか?

    もしくは、マクロ等で次の3つの状態を個別に制御できますか?
    ・元ファイルの排他制御
    ・元ファイルの上書き禁止
    ・エディタ上のバッファが編集可能か否か

    常に書き込み可能でないと困るが上書きしたくないファイルの
    内容確認をしたいのですが整形が必須なのです。
    現在は一時的に排他制御をしないよう設定して
    一旦コピーした上で開くようにしています。
    読み取り専用で開くことができれば元ファイルを
    直に指定でき、それに越したことはないと思いまして。
    • [8135] Re:読み取り専用だがエディタ上では編集可能な状態でファイルを開くには もか 2016年03月27日 19:37

      読み取り専用ファイルで上書きはできないけど、編集だけなら
      共通設定-ファイル-ファイルの排他制御-上書き禁止検出時は編集禁止にする
      のチェックを外せば、編集は可能。

      マクロでは
      ・元ファイルの排他制御
      WSH等でファイルを開いてみれば、エラーが出てそれでわかるはず
      Scripting.FileSystemObject OpenTextFile
      ・元ファイルの上書き禁止
      同上Attributesで操作すればたぶん可能
      読み取りおよび、設定が可能

      ・エディタ上のバッファが編集可能か否か
      読み取り/Vモードは検出可能
      魔法の呪文でExpandParameter("${R?V$:R$:X$}")で、VならViewモード、Rなら上書き禁止、Xならその他
      (上書き禁止)が、編集不可かどうかは設定依存。現在の設定は分からない
      ビューモードはReadOnly()マクロでトグル切り替えが可能
      • [8138] 上書きは不可、かつエディタ上では編集可能な状態にするには たんぶる 2016年04月03日 19:42

        返信ありがとうございました。
        私の表現が変で誤解させてしまい申し訳ありませんでした。


        どうすれば以下の条件を同時に満たすようにできるでしょうか。
        ・開く対象のファイルは読み取り専用属性がつくなどしていない
         普通のファイル
        ・サクラエディタによるファイルアクセスの排他制御はなし
        ・サクラエディタによるファイルの上書きはできない
        ・エディタ上で編集が可能

        コマンドラインオプションを工夫するなどしてファイルを開いた時点で
        全ての条件を満たしているのが理想ですが
        サクラエディタで開いた後、サクラエディタのマクロ機能を使うなどして
        後から設定変更するのでもOKです。
        Excelで、編集可能なファイルを「読み取り専用で開く」
        と指定して開いたときと同じような状態が理想的です。
        • [8139] Re:上書きは不可、かつエディタ上では編集可能な状態にするには もか 2016年04月03日 23:50

          読み違えてたみたいですね。すみません。
          上書きが可能なファイルを編集はできるけど、上書き保存を許可しない方法ですか。
          そのものずばりは標準機能にはないと思います。
          ファイル名を表示しなくていいんなら、空ファイルにデータを貼り付ける系の方法です。

          保存前マクロで保存をキャンセルするマクロコマンドとかはないと思います。
          Ctrl+Sとかをマクロに割り当てれば、単独の保存はトラップできるけど、
          「閉じる」ときに「上書きしますか?」って聞かれた場合は、間違って保存してしまう可能性があります。

          ・ファイルを開かないでマクロで空ファイルを開いておいて「InsFile」で読み込む
          sakura.exe -MTYPE=js "-M=InsFile(""C:\\path\\filename.txt"",0,0)"
          0,0の最初のほうの0は該当文字コードを指定します。
          こんな感じでコマンドラインで開くのも可能です。
          パスの\を\\にするのが面倒くさいです。
          整形マクロでファイル名・パス情報が必要だったら、環境変数か-MにSetCookie等の方法で渡す。

          ・ファイルを開いた後以下のマクロを実行して(無題)にコピペする
          // FileCloseCopy.js
          SetCookie("window", "path", GetFilename());
          SelectAll();
          var data = GetSelectedString(0);
          FileClose(); // 閉じて(無題)これが重要
          // ChangeType(1)等で必要ならタイプ別を変更
          InsText(data);
          以降このウィンドウではGetCookie("window","path")でパスが取れます。
          sakura.exe -MTYPE=file "-M=FileCloseCopy.js" "targetfile.txt"
          ただ問題があって他のサクラが該当ファイルを開いているとうまく動きません。

          (無題)にはしたくないという場合はすみません。いい方法は思いつきません。
          面倒ですがjsマクロでInfoMsg(GetCookie("window","path"))でファイル名の確認はできます。
          • [8142] Re2:上書きは不可、かつエディタ上では編集可能な状態にするには NaKIT 2016年04月10日 21:27

            たんぶる さんの「一旦コピーした上で開く」を,そのままマクロにすればよいのではないでしょうか?
            たとえば,以下のようなマクロを用意し,
            sakura.exe -M=OpenAsSandBox.js targetfile.txt
            で開けば,Windows の temp フォルダに同名で保存し,以後,これを編集することになります。

            // OpenAsSandBox.js
            var FS = new ActiveXObject('Scripting.FileSystemObject');
            var tempFilePath = FS.BuildPath(FS.GetSpecialFolder(2), ExpandParameter('$f'));
            FileSaveAs(tempFilePath, -1, 0);
            • [8147] THX! たんぶる 2016年05月03日 08:31

              遅くなりましたが...
              もかさん、NaKITさんありがとうございました。
              今回はInsFile方式でいくことにします。