テキストの読み書き

  • 投稿日:
  • by
  • カテゴリ:

Apple-Style Plusさんに登録されている方のブログを拝見していると、この休みを利用してCocoaプログラミングに挑戦している方が結構いらっしゃるようですね。

こういうの始める時って、やっぱりまとまった休みでないとなかなか・・・ね。

いったん始めてしまえば暇な時を見つけてチョイチョイできますけど。


明日あさっては、GW毎年恒例のSUPER GT第3戦富士を観戦する予定なので、今日はCocoaの日としよう。

・・・天気良いけど。


さて、この間テキストファイルの読み込部分のみ載せたコードですが、書き込みとかその周辺もできたので全部載せてみます。

何かの足しになれば良いですけど。

あ、そうそう。

メモリ管理の話がまだ理解が追いついていなくて、その辺りの処理は入っていません。


//
//  CocoaSample4.m
//  CocoaSample4
//
//  Created by D.S on 09/04/30.
//  Copyright 2009 __MyCompanyName__. All rights reserved.
//

#import "CocoaSample4.h"


@implementation CocoaSample4

/*
 Openボタン押下時の処理
*/
- (IBAction)open:(id)sender;
{		
	// NSOpenPanelのインスタンス生成
	NSOpenPanel *openPanel = [ NSOpenPanel openPanel ];
	
	// NSOpenPanel表示
	[ openPanel beginSheetForDirectory:@"~/" file:@"" types: nil 
						modalForWindow:[ sender window ] modalDelegate:self 
						didEndSelector:@selector( openPanelDidEnd: returnCode: contextInfo: ) contextInfo:nil ];
}

/*
 saveボタン押下時の処理
*/
- (IBAction)save:(id)sender;
{
	// NSSavePanelのインスタンスを生成
	NSSavePanel *savePanel = [ NSSavePanel savePanel ];
	
	// NSSavePanel表示
	[ savePanel beginSheetForDirectory:@"~/" file:@"" modalForWindow:[ sender window ] 
						 modalDelegate:self didEndSelector:@selector( savePanelDidEnd: returnCode: contextInfo: ) 
						   contextInfo:nil ];

}

/*
 NSOpenPanel終了時の処理
*/
- (void)openPanelDidEnd:( NSOpenPanel * )panel returnCode:( NSInteger )code contextInfo:( void * )contextInfo {
	
	NSString *string = nil;
	NSError  *error;
	
	// 押下されたボタンの判定
	if( code == NSCancelButton ) {
		
		/* Cancelボタン時 */
		
		// 何もせず終了
		return;
	}
	
	//
	// とりあえず、SIJIで読み込んでだめならUTF8で読み込む。それだダメならreturn
	//
		
	// 選択されたファイル名称を取得
	NSString *path = [ panel filename ];
		
	// エンコーディングにNSShiftJISStringEncodingを指定してファイルを読み込む
	string = [ NSString stringWithContentsOfFile:path encoding:NSShiftJISStringEncoding error:&error ];
		
	// 読み込めたか判定
	if( string == nil ) {
			
		/* 読み込めなかった場合 */
			
		// エンコーディングにNSUTF8StringEncodingを指定してファイルを読み込む
		string = [ NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error ];
			
		// 読み込めたか判定
		if ( string == nil ) {
				
			/* 読み込めなかった場合 */
				
			// エラー出力
			NSLog( [ error localizedDescription ] );
				
			return;
		}
	}
			
	// テキストエリアに読み込んだ内容を出力
	[ textView setString: string ];
}

/*
 NSSavePanel終了時の処理
 */
- (void)savePanelDidEnd:( NSSavePanel * )panel returnCode:( NSInteger )code contextInfo:( void * )contextInfo {
	
	NSString *string = nil;
	NSError  *error;
	
	// 押下されたボタンの判定
	if( code == NSCancelButton ) {
		
		/* Cancelボタン時 */
		
		// 何もせず終了
		return;
	}	
	
	// ファイル名称を取得
	NSString *filename = [ panel filename ];
	
	// テキストエリアから表示されているテキストを取得
	string = [ textView string ];
	
	// 取得したテキストをファイルに書き出す
	BOOL result = [ string writeToFile:filename atomically:YES encoding:NSUTF8StringEncoding error:&error ];
	
	// 書き出しが正常であったか判定
	if( result != YES ) {
		
		// エラー出力
		NSLog( [ error localizedDescription ] );
	}
}

@end