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

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

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”
}

import os

カレントディレクトリ
path = os.getcwd()
C:\test\~

カレントディレクトリ変更
os.chdir(‘..\\’)
os.chdir(‘.\\test’)
os.chdir(‘C:\\test\\test’)

ディレクトリ作成
os.makedir(‘C:\\test’)
os.makedir(‘.\\test’)
既にディレクトリがある場合はエラー

ディレクトリ削除
os.rmdir(‘C:\\test’)
os.rmdir(‘.\\test’)
ディレクトリがない場合はエラー

絶対パス取得
path = os.path.abspath(‘.’)
C:\test

相対パス取得
path = os.path.relpath(os.getcwd(), ‘E:\\’)
test\test

絶対パス判定
isabs = os.path.isabs(path)
True/False

【コピー/移動】
import shutil

shutil.copy(コピー元, コピー先)
shutil.copy(‘test.txt’, ‘target’)
target\test.txt

コピー後のファイル名指定
shutil.copy(‘before.txt’, ‘target\\after.txt’)
target\after.txt

shutil.copy(‘inner’, ‘outer’)
エラー(ディレクトリは移動×)

ディレクトリ移動
shutil.move(‘inner’, ‘outer’)
outerが存在する場合
outer\inner
※outerの中へ移動
outerが存在しない場合
outer
※inner→outerへ名称が変更される(innerの中にファイル、ディレクトリがあっても)

サブディレクトリ、ファイル毎強制削除
shutil.rmtree(‘outer’)

【テキストファイル読込/書込】
path = ‘E:\\MyProject\\PythonStudy\\test.txt’

読込モードで開く
file = open(path)
file = open(path, ‘r’)

書込モードで開く
file = open(path, ‘w’)

追記モードで開く
file = open(path, ‘a’)

for i in range (1,11):
  書込
  file.write(str(i) + ‘\n’)

file.close()

file = open(path, ‘r’)

一括読込
content = file.read()
file.close()

file = open(path, ‘r’)

行毎に配列に読
content = file.readlines()

for l in content:
  print(l)

file.close()

【Pythonモジュールとして書込/読込】
import pprint

pg = [‘php’, ‘Java’, ‘Python’]

file = open(‘mymodule.py’, ‘w’)
file.write( ‘pg={}’.format( pprint.pformat(pg) ) )
file.close()

保存したmymodule.pyをモジュールとしてimport
import mymodule

mymodule.py内の変数を操作
for p in mymodule.pg:
  p
  php
  Java
  Python

【変数読込/書込】
import shelve

s = shelve.open(‘mydata’)
pg = [‘php’, ‘Java’, ‘Python’]
s[‘pg’] = pg
s.close()

s = shelve.open(‘mydata’)
s
<class ‘shelve.DbfilenameShelf’>
s[‘pg’]
[‘php’, ‘Java’, ‘Python’]

s.close()

ディレクトリ作成/削除

#(Linuxコマンドを利用)
systemmkdir (ディレクトリ名)“;

systemrmdir (ディレクトリ名)“;
systemrm -r (ディレクトリ名)“;

ディレクトリコピー

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

ディレクトリ移動

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

ディレクトリ情報取得

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”)

フルパス
debug.print myFolder.path
フォルダ名
debug.print myFolder.name

実行環境の場所
$dir = __FILE__;
→/var/www/test/~.php

カレントディレクトリ
$dir = getcwd();
→/var/www/test

import os

path = ‘E:\\MyProject\\PythonStudy\\test.py’

ディレクトリ名
dir = os.path.dirname(path)
E:\MyProject\PythonStudy

ディレクトリ名、ファイル名
dir_base = os.path.split(path)
(‘E:\\MyProject\\PythonStudy’, ‘test.py’)

dir_base[0]
E:\MyProject\PythonStudy

dir_base[1]
test.py

ディレクトリに含まれるディレクトリ、ファイルの一覧
list = os.listdir(path)
[‘phone.py’, ‘test.py’, ‘test2’]

for file in os.listdir(path):
  phone.py
  test.py
  test2

ディレクトリ判定
isdir = os.path.isdir(path)
True/False

存在チェック
isexist = os.path.exists(path)
True/False

【サブディレクトリを含めてファイルを全取得】
import shutil

for foldername, subfoders, filenames in os.walk(‘C:\\’):
  Loop内のカレントディレクトリ
  print(‘Current dir:’ + foldername)
  
  Loop内のサブディレクトリ一覧
  for subfoder in subfoders:
    print(‘subfolder of ‘ + foldername + ‘:’ + subfoder)
  
  Loop内のファイル一
  for filename in filenames:
    print(‘file inside ‘ + foldername + ‘:’ + filename)

ファイル情報取得

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 myFile = myFso.GetFile(“C:\Test.txt”)

フルパス
debug.print myFile.path
ファイル名
debug.print myFile.name
パスが存在しない場合
myFile Is Nothing

‘フォルダ取得
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

実行環境の場所
$dir = __FILE__;
→/var/www/test/~.php

指定ディレクトリ配下のファイルを配列で取得
$files = glob(‘/var/www/test/*.csv’);
→$files[0] test1.csv
→$files[1] test2.csv

import os

path = ‘E:\\MyProject\\PythonStudy\\test.py’

ファイル名
base = os.path.basename(path)
test.py

ディレクトリ名、ファイル名
ディレクトリ情報取得」参照

ディレクトリに含まれるディレクトリ、ファイルの一覧
ディレクトリ情報取得」参照

ファイル判定
isfile = os.path.isfile(path)
True/False

存在チェック
ディレクトリ情報取得」参照

【サブディレクトリを含めてファイルを全取得】
ディレクトリ情報取得」参照

存在チェック
set filename=”test.txt”
if EXIST %filename% (
  
) else (
  
)

読取属性の取得

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より大きい場合、ここを通る
}

import os

byteサイズ
size = os.path.getsize(path)
999

ZIPファイル操作

import zipfile as zip

file = zip.ZipFile(‘sample.zip’)

ZIPファイル内のディレクトリ名、ファイル名を取得
file.namelist()
[‘sample/~.txt’, ‘sample/~.txt’, ‘sample/sample_inner/’, ‘sample/sample_inner/~.txt’]

ZIPファイル新規作成
file = zip.ZipFile(‘sample.zip’, ‘w’)

ZIPファイルにファイルを追加
file.write(‘add1.txt’, compress_type=zip.ZIP_DEFLATED)
file.write(‘add2.txt’, compress_type=zip.ZIP_DEFLATED)
file.close()

file.namelist()
[‘add1.txt’, ‘add2.txt’]

解凍
file.extractall()

ZIPファイル内の指定ファイルのみ、カレントディレクトリに解凍
file.extract(‘add1.txt’)

ZIPファイル内の指定ファイルのみ、指定ディレクトリに解凍
file.extract(‘add2.txt’, ‘extract’)