ก็ช่วงนี้กำลังว่างหลังจาก โปรเจคของผมก็ได้เสร็จไปแล้วส่วนหนึ่ง กำลังรอเหมือนกันว่า ปีนี้จะมีโอกาสได้ไป WWDC กับเค้าบ้างหรือเปล่า ถ้าได้ไปก็คงจะดีเพราะเท่าที่ดูๆคิดว่า จุดใหญ่ๆของปีนี้น่าจะเป็น iphone นี่เหละ
ก็เขียน tutorial มาหลายๆเรื่องจนถึงเกือบจะสุดท้ายละ ก็น่าจะทำให้ใครหลายๆคนไปต่อยอดอ่าน cocoa ได้สบายๆหรือว่าเป็นจุดเริ่มในการเขียนโปรแกรมบน mac มั่งละ
สำหรับวันนี้ก็ต่อเรื่อง ของ File Managerment กันเลยเพราะว่าครั้งก่อนเป็นแค่การ ใช้งาน file เช่นการ copy file อะไรแบบนี้ แต่วันนี้เราจะมารู้จัก class ที่เกี่ยวกับ file เพิ่มเติมนั่นก็คือ NSData
NSData
ปกติแล้ว class ที่เอาไว้สำหรับจัดการ file ก็คือ NSFileManager แต่ถ้าเราต้องการที่จะเขียนข้อมูลลง file หรืออ่านข้อมูลจาก file นั้นเราจะใช้ NSData เพื่อทำการอ่านและเขียนลง buffer เพื่อที่จะให้ NSFileManager จัดการเขียนข้อมูลจาก buffer ลง file จริงๆ
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; //--------------------- Write file ------------------- // Create new file [[NSFileManager defaultManager] createFileAtPath:@"sample.txt" contents:nil attributes:nil]; // Create file handle NSFileHandle *fWriteHandle; fWriteHandle = [NSFileHandle fileHandleForUpdatingAtPath:@"sample.txt"]; if (fWriteHandle == nil) printf("File Error"); char buffer[256] = "Hello "; NSString *nsBuffer = @"world"; // Write data NSData *tempData1 = [NSDatadataWithBytes:buffer length:strlen(buffer)]; NSData *tempData2 = [NSDatadataWithBytes:[nsBuffer UTF8String] length:[nsBuffer length]]; [fWriteHandle writeData:tempData1]; [fWriteHandle writeData:tempData2]; [fWriteHandle closeFile]; // -------------------- Read file ---------------------- NSFileHandle *fReadHandle; fReadHandle = [NSFileHandle fileHandleForReadingAtPath:@"sample.txt"]; if (fReadHandle == nil) printf("File Error"); NSData *tempData3; char readBuffer[256] = ""; // read data to end of file tempData3 = [fReadHandle readDataToEndOfFile]; // get data to buffer [tempData3 getBytes:readBuffer]; printf("\nData in file: \n%s",readBuffer); [fReadHandle closeFile]; [pool release]; }
จากตัวอย่างข้างบน แบ่งออกเป็น 2 ส่วนคือ
-
Write Data
สำหรับการเขียนข้อมูลนั้น เมื่อทำการ สร้าง NSFileManager ขึ้นมาแล้ว สิ่งที่เราต้องทำต่อมาก็คือการสร้าง NSData เพื่อที่จะเก็บข้อมูลที่ต้องการเขียนไปยังไฟล์
NSData *tempData1 = [NSDatadataWithBytes:buffer length:strlen(buffer)];
เราก็ทำการส่ง buffer ไปให้ยัง tempData1 และบอกขนาด buffer ให้เรียบร้อย
หลังจากนั้นก็ให้ NSFileManager ที่เราประกาศไว้เป็นคนเขียน
[fWriteHandle writeData:tempData1];
เพียงเท่านี้เราก็สามารถเขียนข้อมูลลงไฟล์ได้แล้ว
-
Read Data
สำหรับการอ่านข้อมูลนั้นก็ทำงานคล้ายๆกับการเขียนคือ หลังจากประกาศ NSFileManager เสร็จก็ให้ประกาศ NSData ทำการอ่านข้อมูลจาก File มาเก็บไว้ จากตัวอย่าง เราทำการอ่านข้อมูลไปจนสิ้นสุดไฟล์เลย
tempData3 = [fReadHandle readDataToEndOfFile];
แล้วหลังจากนั้น เราก็สร้าง buffer ขึ้นมาเพื่อที่จะนำข้อมูลออกมาจาก NSData อีกที
[tempData3 getBytes:readBuffer];
ก็เป็นตัวอย่างการเขียนและการอ่านไฟล์ แบบง่ายๆ ลองเอาไปหัดใช้กันดู ก็เหมือนเดิม มี source มาให้ด้วยก็โหลดไปลองเล่นกันดู
Download Foundation Framework File Read Write Source Files



say_hi says:
ก็ขอบคุณมากนะครับ ขอให้เขียนอีกเยอะๆครับ ตอนนี้ผมกำลังต้วมเตี้ยมเป็นเด็กอนุบาลใน Cocoa
June 11, 2008, 3:52 pmและ Objective-C อยู่ครับจะตามไปนะครับ จาได้มีเพื่อนๆกัน
titradevil says:
ถ้าเราจะอ่านค่าจาก เวปไซด์ ได้ไหมครับ สามารถเปลี่ยน เป็น URL เลยได้ไหมครับหรือว่าต้องผ่านตัวอื่น เช่น http://www.test.test.txt แบบนี้สามารถใช้คำสั่งนี้เลยได้ไหมครับ
fReadHandle = [NSFileHandle fileHandleForReadingAtPath:@"ตรงนี้"];
October 3, 2009, 1:05 pmadmin says:
จุดประสงค์คือต้องการอ่านไฟล์ จาก เวป ใช่ไหมครับ ?
ถ้าเป็นแบบนี้เราจะไม่ใช้ NSFileHandle ครับ
แบบนี้จะง่ายกว่า
NSMutableString *fileData = [[NSMutableString alloc] initWithContentsOfURL:[NSURL fileURLWithPath:@"http://www.test.test.txt"]];
October 4, 2009, 3:03 am