//
//  FileControl2.m
//
//  Created by 今井 彰彦 on 2011/12/05
//  Copyright 2011-12 AIG-Soft. All rights reserved.
//

#import "FileControl2.h"


NSArray *files(NSString *basepath,NSString *ext)
// ディレクトリbasepathの中の拡張子extのリストを得る
// ローカル確保なので、長期保存にはretain/copyすること
{
	nslog(@"files:basepath=%@,ext=%@",basepath,ext);
	NSArray *pathListAll=[NSArray arrayWithArray:[[NSFileManager defaultManager]subpathsAtPath:basepath]]; // これで返ってくるのはファイル名のみ(*.*)
	nslog(@"pathListAll=%@",pathListAll);
	//
	NSMutableArray *pathList=[[NSMutableArray alloc]init ];
	for (NSString *path in pathListAll) {
		// 拡張子チェック
		if ([[path pathExtension]isEqualToString:ext]) {
			// 拡張子一致
			nslog(@"path=%@",path);
			[pathList addObject:[NSString stringWithFormat:@"%@/%@",basepath,path]];
		}
	}
	nslog(@"pathList=%@",pathList); // ここにはフルパス名が入る
	NSArray *list=[NSArray arrayWithArray:pathList];
	return (list);
}

NSString *makeFullPathForTemporaryPath(NSString *basename)
// ディレクトリ「tmp」のフルパスを得る
// ローカル確保なので、長期保存にはretain/copyすること
{
	nslog(@"makeFullPathForTemporaryPath:%@",basename);
#ifdef DEBUG
	// シミュレーター環境で実機と同じ場所にする
	return [NSHomeDirectory() stringByAppendingFormat:@"/tmp/%@",basename];
#else
	// NSTemporaryDirectory()は実機とシミュレーター環境では場所がぜんぜん違う
	return [NSTemporaryDirectory() stringByAppendingString:basename];
#endif
}

NSString *makeDocumentsPath(void)
// ディレクトリ「Documents」のフルパスを得る
// iTunesからのデータやりとりもここ
// ローカル確保なので、長期保存にはretain/copyすること
{
	nslog(@"makeDocumentsPath");
	NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
#if 0
	for (NSString *path in paths) {
		nslog(@"path=%@",path);
	}
#endif
	// paths[0]を取り出す;そこにディレクトリ名が入っているらしい
	NSString *documentsDirectory = (([paths count] > 0)?		// 見つかったら
									/* これ↑は単なるポインタ参照 */
									paths[0]	// 最初のもの
									: NSTemporaryDirectory() );	// なければ一時ディレクトリ
	nslog(@"documentsDirectory=%@",documentsDirectory);
	return (documentsDirectory);
}

NSString *makeFullPathForSaveData(NSString *fname)
// データファイル名をフルパス名にする
// ディレクトリ「Documents」である。iTunesからのデータやりとりもここ。
// リソースのファイル名には使えない
// ローカル確保なので、長期保存にはretain/copyすること
{
	// ファイルパスの末尾にファイル名を追加
	return [NSString stringWithString:[makeDocumentsPath() stringByAppendingPathComponent:fname]];
}

NSString *makeFullPathForSaveDataFromDate(NSString *basename)
// 日時を伴ったファイル名を作成する
// ローカル確保なので、長期保存にはretain/copyすること
{
//	nslog(@"basename=%@",basename);
	// 現在日時の文字列を得る
	NSDateFormatter *formatter=[[NSDateFormatter alloc]init]; // initはiOS4.0で廃止されている
	[formatter setLocale:[NSLocale currentLocale]]; // Localeの設定(重要)
	[formatter setDateFormat:@"yyyyMMdd_HHmmss_"];
	NSDate *date=[NSDate date];	// 一旦インスタンスに入れないとメモリリークを起こす
	NSString *dtstr=[formatter stringFromDate:date]; // 一旦インスタンスに入れないとメモリリークを起こす
	NSString *str=[[NSString alloc]initWithString:dtstr];
	// 一発で記述するとメモリリークを起こす
//	NSString *str=[[NSString alloc]initWithString:[formatter stringFromDate:date]];
//	nslog(@"str1=%@(%d)+%@(%d)",str,[str length],basename,[basename length]);
	NSString *fname=[str stringByAppendingString:basename];
	return (makeFullPathForSaveData(fname));
}

void fileDelete(NSString *fname)
// ファイル削除
{
	nslog(@"fileDelete:%@",fname);
	if (fname==nil) {
		nslog(@"削除対象ファイルなし");
		return;
	}
	// ファイル削除
	NSFileManager *fileManager=[NSFileManager defaultManager];
	NSError *err;
	err=[[NSError alloc]init];
	if (![fileManager removeItemAtPath:fname error:&err]) {
		// 削除エラーは取らない；出るようならiOSがおかしいか、フラッシュがへたっている可能性が高いので、ここで対処できないから
		// !! error !!
		nslog(@"remove error:%@",err);
	}
}
