プログラム言語 ファイル処理
ファイル・ディレクトリ操作
ディレクトリ作成
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”);
‘ディレクトリ作成
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
‘ファイルコピー(上書き禁止)
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( (パス) & (変更前ファイル名), (パス) & (変更後ファイル名)
※(変更前ファイル名)は消える。
$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”
}
カレントディレクトリ
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コマンドを利用)
system “mkdir (ディレクトリ名)“;
system “rmdir (ディレクトリ名)“;
system “rm -r (ディレクトリ名)“;
ディレクトリコピー
#(Linuxコマンドを利用)
system “cp -r
(コピー元パス) (コピー先パス)“;
※コピー元ディレクトリは残る。
ディレクトリ移動
#(Linuxコマンドを利用)
system “mv
(移動元パス) (移動先パス)“;
※移動元パスは消える。
ディレクトリ情報取得
親フォルダ取得
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 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
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)
ファイル情報取得
拡張子無しファイル名取得
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 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
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 (
)
読取属性の取得
bool readFlg = ((fas & FileAttributes.ReadOnly) == FileAttributes.ReadOnly);
if (readFlg == true)
{
throws new UnauthorizedAccessException(message: @”ファイルが読み取り専用です。”);
}
ファイル選択
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>
フォルダ選択
フォルダ選択ダイアログ初期表示パス
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より大きい場合、ここを通る
}
byteサイズ
size = os.path.getsize(path)
999
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’)