プログラム言語 ファイル処理

ファイル・ディレクトリ操作

using System.IO;

ディレクトリ作成
Directory.CreateDirectory(path: @"D:\a\a\a\a\a");
多階層のディレクトリが一気に作成される。
ただしどこかに重複するディレクトリがあると例外が発生する。

ディレクトリ移動(コピーはできない)
Directory.Move(sourceDirName: @"D:\Folder1", destDirName: @"D:\Folder2");

ディレクトリ削除
Directory.Delete(path: @"D:\Folder");

ファイル作成
StreamWriter sr = new StreamWriter(path: @"D:\Folder1\New.txt", append: false);
sr.WriteLine(value: "aaa");
sr.Close();

ファイル移動
File.Move(sourceFileName: @"D:\Folder1\New.txt", destFileName: @"D:\Folder2\New.txt");

名前変更
File.Move(sourceFileName: "C:\Before.txt", destFileName: "C:\After.txt");
※C:\Before.txt は無くなる。

ファイルコピー
File.Copy(sourceFileName: @"D:\Folder2\New.txt", destFileName: @"D:\Folder1\New1.txt");

ファイル削除
File.Delete(path: @"D:\Folder2\New.txt");

Imports System.IO

‘ディレクトリ作成
Directory.CreateDirectory(path:="D:\Folder1")

‘ディレクトリ移動(コピーはできない)
Directory.Move(sourceDirName:="D:\Folder3", destDirName:="D:\Folder2")

‘ディレクトリ削除
Directory.Delete(path:="D:\Folder3")

‘ファイル作成
Dim sr As New StreamWriter(path:="D:\Folder1\New.txt", append:=False)
sr.WriteLine(value:="aaa")
sr.Close()

‘ファイル移動
File.Move(sourceFileName:="D:\Folder1\New.txt", destFileName:="D:\Folder2\New.txt")

‘ファイルコピー
File.Copy(sourceFileName:="D:\Folder2\New.txt", destFileName:="D:\Folder1\New1.txt")

‘ファイル削除
File.Delete(path:="D:\Folder2\New.txt")

‘ディレクトリ存在確認
If Directory.Exists(path:="D:\Folder") = False Then
  MessageBox.Show(text:="フォルダがありません。")
End If

‘ファイル存在確認
If File.Exists(path:="D:\Folder\New.txt") = False Then
  MessageBox.Show(text:="ファイルがありません。")
End If

‘指定ディレクトリ直下のファイル一覧を取得
Dim filenm() As String = Directory.GetFiles(path:="D:\Folder1", searchPattern:="*", searchOption:=SearchOption.AllDirectories)
⇒filenm(0) : D:\Folder1\New1.txt
⇒filenm(1) : D:\Folder1\New2.txt

Dim cFso As New FileSystemObject

'ファイルコピー(上書き禁止)
cFso.CopyFile("C:\sample1.txt", "C:\sample2.txt", False)
'ファイルコピー(上書き許可)
cFso.CopyFile("C:\sample1.txt", "C:\sample2.txt", True)

'削除(ファイルOPEN中だとエラー)
Call myFso.DeleteFile("C:\Test.txt")

'移動
Call myFso.MoveFile( (移動前パス) & (ファイル名), (移動後パス) & (ファイル名)

'リネーム
Call myFso.MoveFile( (パス) & (変更前ファイル名), (パス) & (変更後ファイル名)
※(変更前ファイル名)は消える。

ファイルOPEN
$p = fopen('test.csv', 'r');

OPENモード
r
読み込みのみ可。
ファイルポインタはファイルの先頭に。

r+
読み書き可。
ファイルポインタはファイルの先頭に。

w
書き込みのみ可。
ファイルポインタはファイルの先頭に。
ファイルサイズをゼロに。
ファイルが存在しない場合は新規作成。

w+
読み書き可。
ファイルポインタはファイルの先頭に。
ファイルサイズをゼロに。
ファイルが存在しない場合は新規作成。

a
追加書き込み可。
ファイルポインタをファイルの終端に。
ファイルが存在しない場合は新規作成。

a+
追加書き込み・読み取りが可。
ファイルポインタをファイルの終端に。
ファイルが存在しない場合は新規作成。

x
書き込みのみ可。
ファイルポインタはファイルの先頭に。
ファイルが存在するとfopen関数は失敗し、E_WARNINGレベルのエラーを出力。
ファイルが存在しない場合は新規作成。

x+
読み込み・書き込み可。
ファイルポインタはファイルの先頭に。
ファイルが存在するとfopen関数は失敗し、E_WARNINGレベルのエラーを出力。
ファイルが存在しない場合は新規作成。

ファイルポインタを閉じる
fclose()

ファイルから1行取得
fgets()

ファイルをバイナリ・モードで読み込む
fread()

ファイルをバイナリ・モードで書き込む
fwrite()

インターネットもしくはUNIXドメインのソケット接続を開始
fsockopen()

ファイルの内容を全て取得、配列に格納
file()

ファイル、ディレクトリやシンボリックリンクが存在するか調べる
if (!file_exists("C:\test.txt")){
  echo “ファイルがありません。”;
}

ファイルが読み込み可能かどうか調べる
is_readable()

CSVファイルから1行取得、配列に格納
fgetcsv()

$handle = fopen( "c:\test.csv", "r" );
while ($array = fgetcsv( $handle )) {
 var_dump( $array );
}

実行結果
array(3) {
 [0]=>
 string(3) "aaa"
 [1]=>
 string(3) "bbb"
 [2]=>
 string(3) "ccc"
}
array(3) {
 [0]=>
 string(3) "ddd"
 [1]=>
 string(3) "eee"
 [2]=>
 string(3) "fff"
}

ディレクトリ作成/削除

#(Linuxコマンドを利用)
system "mkdir (ディレクトリ名)";

system "rmdir (ディレクトリ名)";
system "rm -r (ディレクトリ名)";

ディレクトリコピー

#(Linuxコマンドを利用)
system "cp -r
(コピー元パス) (コピー先パス)";
※コピー元ディレクトリは残る。

ディレクトリ移動

#(Linuxコマンドを利用)
system "mv
(移動元パス) (移動先パス)";
※移動元パスは消える。

ディレクトリ情報取得

using System.IO;

親フォルダ取得
string strDirPath = Path.GetDirectoryName("C:\test.txt");
→strDirPath : C

ディレクトリ存在確認
if (!Directory.Exists(path: @"D:\Folder")){
  MessageBox.Show(text: "フォルダがありません。");
}

絶対パス判定
bool isRoot = Path.IsPathRooted(@"D:\a\test.txt");
isRoot:true

bool isRoot = Path.IsPathRooted(@"a\a\test.txt");
isRoot:false

パス結合
string dir = @"c:\test";
string file = @"text.txt";

string path = Path.Combine(path1: dir, path2: file);
path:c:\test\test.txt
「\」が自動的に追加されている

列挙オブジェクトに格納
LINQ.Enumerable/ファイル情報」参照

Dim myFso As FileSystemObject
Dim myFolder As Folder

'フォルダ取得
Set myFolder = myFso.GetFolder("C:\Test.txt")

ファイル情報取得

using System.IO;

拡張子無しファイル名取得
string strFileName = Path.GetFileNameWithoutExtension("C:\test.txt");
→strFileName : test

ファイル名取得
string strFileName = Path.GetFileName("C:\test.txt");
→strFileName : test.txt

拡張子取得
string ext = Path.GetExtension("C:\test.txt");
→ext : .txt ※test.csv.txt.log の場合:.log

ファイル存在確認
if (!File.Exists(path: @"D:\Folder\New.txt"))
{
  MessageBox.Show(text: "ファイルがありません。");
}

指定ディレクトリ直下のファイル一覧を取得
string[] filenm = Directory.GetFiles(
 path: @"D:\Folder1",
 searchPattern: @"*",
 searchOption: SearchOption.AllDirectories);
⇒filenm[0] : D:\Folder1\New1.txt
⇒filenm[1] : D:\Folder1\New2.txt

列挙オブジェクトに格納
LINQ.Enumerable/ファイル情報」参照

Dim myFso As FileSystemObject

Dim myFolder As Folder
Dim myFile As File
Dim fileNm As String
Dim extension As String

'フォルダ取得
Set myFolder = myFso.GetFolder("C:\Test.txt")

'フォルダ内ファイルを全件取得
For Each myFile In myFolder.Files
 Set myFile = myFso.GetFile("C:\Test.txt")
 
 myBase = myFso.GetBaseName("C:\Test.txt")
 → Test
 
 'ファイル名
 fileNm = myFile.Path
 → fileNm:"C:\Test.txt"
 
 '拡張子
 extension = myFso.GetExtensionName(fileNm )
 → extension:"txt"
Next myFile

読取属性の取得

FileAttributes fas = File.GetAttributes("C:\test.txt");
bool readFlg = ((fas & FileAttributes.ReadOnly) == FileAttributes.ReadOnly);

if (readFlg == true)
{
  throws new UnauthorizedAccessException(message: @"ファイルが読み取り専用です。");
}

ファイル選択

openfiledialog

OpenFileDialogクラスのインスタンスを作成
var dialog = new OpenFileDialog();

if (dialog.ShowDialog() == DialogResult.OK) {

  string filePath = dialog.FileName;
  filePath : "D:\read.txt"

  string fileNm = dialog.SafeFileName;
  fileNm : "read.txt"
}


<input id="myFile" type="file" /><br/>


<label id="myLabel">ファイルパス</label>


<script type="text/javascript">
    try {
      $(function(){
        $("#myFile").change(function(){
          var strPath = $("#myFile").val();
          $("#myLabel").text(strPath);
        });
      });
    }catch(e){
      window.alert(e.message);
    }
</script>

フォルダ選択

var ofd = new FolderBrowserDialog();

フォルダ選択ダイアログ初期表示パス
ofd.SelectedPath = ~;

フォルダ選択ダイアログ表示
if (ofd.ShowDialog() == DialogResult.OK)
{
  フォルダ選択結果取得
  string path = ofd.SelectedPath;
}

置換

バックアップファイル作成
string main = @"d:\a\test.txt";
string backup = Path.ChangeExtension(path: main, extension: ".bak");
string temp = Path.ChangeExtension(path: main, extension: ".$$$");

File.WriteAllLines(path: temp, contents: new string[] { "aaa" });
if (!File.Exists(path: main))
 File.Move(sourceFileName: temp, destFileName: main);
else
 File.Replace(
  sourceFileName: temp,
  destinationFileName: main,
  destinationBackupFileName: backup);
test.$$$→test.txtへ置換
test.txt→test.bakへバックアップ作成(test.txtがある前提)

ファイルサイズ

ファイルのサイズを取得
FileInfo info = new FileInfo(@"C:\Test.txt");
long filesize = info.Length;

if (filesize / 1024 / 1024 > 10)
{
  10MBより大きい場合、ここを通る
}