Windowsで任意のサイズのファイル作成

前回初めて使ったWindowsのfsutilコマンドが気になります。
fsutilにどのような機能があるか見ていこうと思います。

C:\Users\takk\tmp>fsutil
---- サポートされるコマンド ----

8dot3name       8dot3name 管理
behavior        ファイル システムの動作の制御
dirty           ボリュームの dirty ビットの管理
file            ファイルに固有のコマンド
fsinfo          ファイル システム情報
hardlink        ハードリンクの管理
objectid        オブジェクト ID の管理
quota           クォータの管理
repair          自己復旧の管理
reparsepoint    再解析ポイントの管理
resource        トランザクション リソース マネージャーの管理
sparse          スパース ファイルの制御
transaction     トランザクションの管理
usn             USN の管理
volume          ボリュームの管理
wim             透過的な wim ホスティングの管理

C:\Users\takk\tmp>

まず気になるのが、fileコマンド。fsutil fileを実行して、サポートしているコマンドを確認します。

C:\Users\takk\tmp>fsutil file
---- サポートされる FILE コマンド ----

createnew               指定されたサイズの新しいファイルの作成
findbysid               セキュリティ識別子でファイルを検索
queryallocranges        ファイルに割り当てられた範囲の照会
queryextents            ファイルのエクステントの照会
queryfileid             指定されたファイルをファイル ID で照会
queryfilenamebyid       ファイル ID のランダム リンク名を表示
queryvaliddata          ファイルの有効なデータ長の照会
setshortname            ファイルの短い名前の設定
setvaliddata            ファイルの有効なデータ長の設定
setzerodata             ファイルのゼロ データの設定

C:\Users\takk\tmp>

createnewと、setzerodata当たりが気になります。

createnewから見ていきます。

C:\Users\takk\tmp>fsutil file createnew
使用法 : fsutil file createnew <ファイル名> <長さ>
    例 : fsutil file createnew C:\testfile.txt 1000

C:\Users\takk\tmp>

任意の長さのファイルを作るコマンドですね。使ってみます。

PS C:\Users\takk\tmp> fsutil file createnew aa.txt 10
ファイル C:\Users\takk\tmp\aa.txt が作成されました
PS C:\Users\takk\tmp>

dirで確認すると、このように10Byteのファイルができています。

PS C:\Users\takk\tmp> dir


    ディレクトリ: C:\Users\takk\tmp


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2018/06/17     22:11         10 aa.txt


PS C:\Users\takk\tmp>

値はオール0なのでしょうか。PowerShellを使って確認します。

C:\Users\takk\tmp>powershell
Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.

PS C:\Users\takk\tmp>
PS C:\Users\takk\tmp> gc -encoding byte aa.txt
0
0
0
0
0
0
0
0
0
0
PS C:\Users\takk\tmp>

オール0です。
いろいろ使えそうです。