태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Adobe AIR2007.12.21 11:20


어도비 AIR에는 SQLite라는 데이터베이스 라이브러리가 있습니다..사용도 아주 간편하고 하나의 파일로 생성되기 때문에 관리가 용이합니다..특히 기존의 SQL과 거의 동일한 구문으로 작성이 가능하므로 쉽고 빠르게 작업할 수 있습니다..

PHP 5에도 SQLite가 적용되었는데요..AIR의 한글 문서가 없으니 PHP 문서를 통해 SQLite에 대해 알아보죠..

SQLite는 SQL 92 표준에 맞춰 구현된 임베디드 데이터베이스 라이브러리이다. SQLite는 일반적인 데이터베이스처럼 데몬을 구동하는 방식이 아니라, 엔진이라 할 수 있는 하나의 라이브러리에 데이터베이스 인터페이스를 병합한 형태다. 게다가 데이터를 단지 파일 하나에만 저장하는 방식이다.
SQLite는 내부 구조가 최대로 튜닝 되어 있고 다른 데이터베이스에서 볼 수 있는 데몬을 사용한 클라이언트/서버 구조가 아니기 때문에, MySQL이나 PostgreSQL에 비해 많은 경우에 2~3배 정도 빠르다.

SQLite는 자체적으로 매우 적은 메모리를 사용한다. 다른 어떤 데이터베이스보다 적은 메모리를 사용하도록 최대한으로 최적화 되어 있기 때문에 간단하고 편리하게 데이터베이스를 사용하고자 하는 경우에 매우 적합하게 사용할 수 있다.

SQLite는 속도와 효율성 뿐만 아니라 다른 여러가지 장점을 가지고 있기 때문에 다양한 용도로 사용될 수 있다. SQLite의 데이터베이스는 단순한 파일들이다. 그리고 이 파일들은 권한이 자동으로 관리된다. 따라서 데이터베이스를 보호하기 위해 복잡하게 관리 기술을 습득할 필요가 없다. 또한 단순 파일이기 때문에 이기종 간의 데이터 이전도 손쉽게 할 수 있다.
SQLite는 일기장, 다이어리, MP3 플레이리스트 등 어플리케이션의 다양한 부분에서 아주 유용하게 쓸 수 있을 것입니다..






신고
Posted by 원강민
Adobe AIR2007.11.14 22:16

Project - Export Release Version 을 통해 AIR 어플리케이션을 퍼블리쉬 할 때 서명하지 않고 퍼블리쉬 하면 .airi 파일이 생성되는데요..

이건 설치는 할 수 없고 'AIR ADT 커맨드라인 툴'을 이용해 실행만 할 수 있습니다..

조금 귀찮아도 서명은 '필수'입니다!!

신고
Posted by 원강민
Adobe AIR2007.11.14 21:14

    AIR를 Export 할 때 디지털 서명을 하는 부분이 나옵니다..그냥 아무거나 적고 넘어가도 되지만 디지털 서명이 뭔지 궁금하니까 잠깐 살펴 보겠습니다..

    http://livedocs.adobe.com/labs/air/1/devappsflash/help.html?content=distributing_apps_2.html

    위 URL에 보시면 AIR 파일에 디지털 서명하는 것에 대해 자세히 나와 있습니다..참고하시구요..


    일단 디지털 서명을 사용하는 이유에 대해 알아보죠..


    '디지털 서명은 데이터의 무결성 및 출처를 확인하는 방법입니다. 강력한 암호화 기술과 공개 키 기반 구조를 사용하여 문서의 신뢰성, 통합성 및 부인 방지를 보장합니다.'


    데이터 무결성과 출처 확인이 이유군요..그럼 어떤 경우에 사용할 수 있을까요?


    '디지털 서명은 일반적으로 데이터가 일반 텍스트로 또는 암호화되지 않은 형식으로 배포된 경우에 사용됩니다. 이러한 경우 메시지 자체의 민감도가 암호화를 보증하지는 않지만 데이터가 원래 형식으로 되어 있는지 그리고 불법 사용자가 보낸 것은 아닌지 반드시 확인해야 합니다. 그 이유는 배포된 컴퓨팅 환경에서는 권한 부여 여부에 관계없이 네트워크상의 누구라도 일반 텍스트를 읽거나 변경할 수 있기 때문입니다.'


    마이크로소프트 오피스의 경우 디지털 서명에 대해 민감하게 반응합니다..

    사용자 삽입 이미지


    서명이 제대로 있나 보군요..아래를 보시죠..


    사용자 삽입 이미지


    보낸 사람과 서명자가 동일합니다..믿을만한 파일이겠죠?

    사용자 삽입 이미지


    어..서명자가 다릅니다..의심스럽네요..


    사용자 삽입 이미지


    사용자 삽입 이미지



    문제를 제기하네요..똑똑한 오피스입니다..
    음..그럼 AIR에도 뭔가 이와 같은게 있을거 같은데요..설치화면을 보시죠..


    사용자 삽입 이미지


    이상하네요..디지털 서명을 하구서 만든 AIR 파일인데 Publisher가 UNKNOWN이군요..

    아직 제대로 지원이 안되는 걸까요? 가장 위의 문서에는 '서명이 있으면 인스톨할 때 제작자의 이름이 보여진다'고 했는데 말이죠..


    뭐 어쨌든, 디지털 서명에 대한 약간의 지식욕은 해소 된 것 같습니다..

    디지털 서명은 원 제작자에 대한 권리보호와 사용자에 대한 보호의 목적으로 사용하는거 같습니다..그 내부는 심오한 암호화 로직이 자리잡고 있을테구요..으흐..

    움..보다 더 자세한 내용을 알게 되면 그때 다시 포스팅 하기로 하구 오늘은 이정도로 끝내겠습니다..^^

신고
Posted by 원강민
Adobe AIR2007.11.14 20:06

** 이 자료는 AIR 알파버젼 문서의 내용입니다..현재는 베타2가 나와 있으니 새로운 문서도 꼭 참고 하시기 바랍니다..기본 개념은 같고 메소드 이름이 바뀐게 보이네요..

<파일 시스템 API 사용>

아폴로는 사용자 컴퓨터의 파일과 디렉토리의 읽기, 쓰기를 허용하는 파일 I/O API를 제공합니다. 파일 I/O API는 다음과 같은 기능을 포함합니다:

- 파일과 디렉토리의 생성, 삭제
- 파일과 디렉토리의 복사, 이동
- 디렉토리 있는 컨텐츠의 리스트 표시
- 파일과 디렉토리의 시스템 정보 얻기
- 바이너리 파일 읽기/쓰기
- 텍스트 파일 읽기/쓰기
- 액션스크립트 오브젝트의 직렬화 및 역직렬화
*(직렬화 - 인스턴스화 한 클래스 객체를 파일로 저장)

파일 시스템 작업을 위한 로우-레벨 기능은 액션스크립트를 통해 접근됩니다. 아폴로를 위한 플렉스 프레임웍은 파일과 디렉토리 작업을 위한 컴포넌트가 포함됩니다. 그러나 이것은 파일 시스템 운행과 파일과 디렉토리를 선택하기 위한 그래픽 컴포넌트입니다. 그것들은 근본적인 파일 I/O 조작은 직접적으로 허용하지는 않습니다.

이 장의 정보에 더하여, 5장 "파일 시스템을 통한 작업"을 보십시오. 이 장에서 설명한 개념에 대한 실제 예제들을 보여주고, 플렉스 빌더 또는 아폴로 SDK를 사용해서 여러분이 테스트할 수 있는 MXML 코드를 제공합니다.

<보안 모델>

아폴로는 최종적으로 파일시스템 같은 로컬 자원의 접근을 위한 완벽한 보안 모델을 제공할 것입니다. 그러나, 아직 이 보안 모델은 아폴로 알파에는 갖춰지지 않았습니다.

아폴로 어플리케이션이 사용자의 컴퓨터로부터 설치되고 실행된다는 것은 중요합니다. 아폴로 어플리케이션은 웹브라우저와는 다른 보안 컨텍스트와 보안 모델을 가집니다. 이 때문에, 다른 어플리케이션을 전송 및 실행에 적용하는 동일한 규칙은 아폴로 어플리케이션의 전송 및 실행에 적용합니다. 사용자는 믿을수 있는 소스만 다운로드하고 설치하게 됩니다.

<파일과 디렉토리 접근>

아폴로 어플리케이션은 윈도우와 맥OS를 포함해서 다양한 플랫폼에서 실행될 수 있습니다. 아폴로 파일 API는 'platform-neutral code syntax' 를 사용합니다.

예를들어, 여러분이 맥OS와 윈도우 사이의 다른 파일 경로를 나타내려 한다면..

- 맥OS의 전형적인 파일 경로는 '/Users/joe/Documents/test.txt' 입니다.
- 윈도우의 전형적인 파일 경로는 'C:\Documents and Settings\joe\My Documents\test.txt' 입니다.

하지만, 여러분은 아폴로 컴포넌트, 클래스, 메소드 그리고 속성등을 이용해 파일 접근을 동일하게 할 수 있습니다.

액션스크립트 파일 오브젝트는 파일 또는 디렉토리의 포인터입니다. 'File' 클래스는 'documentsDirectory' 라는 정적 속성을 가지는데 사용자 디렉토리의 포인터인 파일 오브젝트를 포함합니다. 이것은 윈도우의 'My Documents directory', 맥OS 사용자 디렉토리의 'Documents subdirectory' 입니다. 다음 코드를 확인하세요.

trace(File.documentsDirectory.nativePath)
// On Windows:
// C:\Documents and Settings\joe\MyDocuments
// On Mac OS: /Users/joe/Documents

여러분은 resolve() 메소드를 이용해서 디렉토리 내의 파일 또는 서브디렉토리를 수정할 수 있습니다. 예를들어, 다음에 나오는 코드는 사용자 디렉토리에 'Apollo Test' 서브디렉토리를 생성합니다.

var newDir:File = File.documentsDirectory;
newDir = newDir.resolve("ApolloTest");
newDir.createDirectory( );

파일 오브젝트는 파일 또는 디렉토리 어느 한쪽을 가리킬 수 있습니다. 또한, 이전 예제에서 살펴본대로 파일 오브젝트는 존재하지 않는 파일 및 디렉토리를 가리킬 수도 있습니다.

<디렉토리 접근을 위한 File 클래스 속성>

File 클래스는 일반적으로 디렉토리를 사용하기 위한 다음과 같은 정적 속성을 포함합니다.

File.appStorageDirectory
- 각 설치된 아폴로 어플리케이션은 유일한 'application storage directory'가 주어집니다. 이것은 로그 파일, 캐시 파일 및 참조 파일이 포함될 수 있습니다.

File.appResourceDirectory
- 어플리케이션의 설치 디렉토리

File.currentDirectory
- 런칭된 파일디렉토리입니다.

File.desktopDirectory
- 유저의 데스크탑 디렉토리입니다.

File.documentsDirectory
- 윈도우의 'My Documents' 입니다.(맥OS 'Documents subdirectory')

File.userDirectory
- 사용자의 홈 디렉토리입니다. 예를 들면, 맥OS에서는 'Users/username'이며 윈도우에서는 'c:\\Document and Settings\username'입니다.


<파일 오브젝트(File Object)의 url, nativePath 속성>

파일 오브젝트의 'url' 속성은 파일 또는 폴더의 위치를 string으로 반환합니다.

var directory:File = File.userDirectory;
trace(directory.url)
// on Windows: file:///C:/Documents%20and%20Settings
// on Mac OS: file:///Users

그에 반해 'nativePath' 속성은 윈도우 또는 맥OS의 유일한 string을 반환합니다. 예를 들면, 여러분은 이 코드를 이용해 윈도우 컴퓨터의 파일을 가리킬 수 있습니다.

var file:File = new File( );
file.nativePath = "c:/ApolloTest/surprise.txt";

그러나, 디렉토리를 알기위해서는 이전 섹션의 'File.appStorageDirectory'와 같은 표에 있던 하나로 시작하는게 좋습니다. 다음 코드와 같이 디렉토리의 상대경로를 생성하는 resolve() 메소드를 사용합니다.

var logFile:File = File.appStorageDirectory;
logFile = logFile.resolve("log.txt");

앞으로 여러분의 어플리케이션을 접근할 수 있도록 저장된 디렉토리를 사용합니다.

<URI Schemes>

URI 스키마는 다음 예의 파일과 같은 URL의 처음에 지정됩니다.

file:///c:/ApolloTest/test.txt

게다가 파일 URI 스키마에 대해서 아폴로는 새로운 URI 스키마(app-storage, app-resource)를 제공합니다.

app-storage
- 어플리케이션 저장 디렉토리를 확인합니다.

var logFile:File = File.appStorageDirectory;
logFile = logFile.resolve("log.txt");
trace(logFile.url); // app-storage:/log.txt

app-resource
- 어플리케이션의 설치 폴더를 확인합니다.

var installDir:File = new File( );
installDir.url = "app-resource:/";
installDir = installDir.resolve("HelloWorld-app.xml");
trace(installDir.url); // app-resource:/HelloWorld-app.xml

file
- 파일 오브젝트의 url 속성은 기본적인 파일 URL 스키마를 반환합니다.

var file:File = File.documentsDirectory;
file = file.resolve("ApolloTest/test.txt");
trace(file.url);
// On Windows:
// file:///C:/Documents%20and %20Settings/ ... /test.txt
// On Mac OS:
// file:///Users/userName/Documents/ ... /test.txt

<메소드의 비동기 및 동기 버젼>

File 클래스의 몇가지 메소드(File.copyFile(), File.copyFileAsync()와 같은)와 FileStream 클래스는 동기 및 비동기 버젼을 둘 다 가집니다.

동기 메소드는 파일 조작이 완료될때까지 단념하지 않습니다. 비동기 메소드는 같은 시간에 다른 액션스크립트 프로세스를 허용하는 백그라운드에서 실행되며, 비동기 파일 조작이 끝났을 때, 끝난것을 리스너에서 이벤트로 알립니다.

여기 파일을 복사하는 동기 메소드 copyTo()의 예제가 있습니다.

var file1:File = File.documentsDirectory.
resolve("ApolloTest/test.txt");
var file2:File = File.documentsDirectory.
resolve("ApolloTest/copy of test.txt");
file1.copyTo(file2);
trace("Not output until the file is copied.");

아래는 비동기로 파일을 복사하는 copyToAsync()의 예제입니다.

var file1:File = File.documentsDirectory.
resolve("ApolloTest/test.txt");
var file2:File = File.documentsDirectory.
resolve("ApolloTest/copy of test.txt");
file1.copyToAsync(file2);
file1.addEventListener(Event.COMPLETE, completeHandler);
trace("This line executes before the complete event.");
trace("So does this line.");
private function completeHandler(event:Event):void {
trace("Done.");
}

다음 표는 File 클래스의 비동기 메소드와 이벤트입니다.

copyToAsync()              complete, ioError
deleteDirectoryAsync()     complete, ioError
deleteFileAsync()          complete, ioError
listDirectoryAsync()       directoryListing, ioError
moveToAsync()              complete, ioError
moveToTrashAsync()         complete, ioError

파일을 열때는 FileStream 오브젝트의 open() 또는 openAsync() 메소드중 하나를 사용합니다. 전자는 동기로 파일을 열고, 후자는 비동기로 파일을 엽니다. 더 자세한 내용은 다음 장의 "The open() and openAsync() Methods"를 보세요.

프로그레스 바와 같은 것은 비동기 메소드를 사용하세요. 예를 들어 용량이 적은 파일(1MB 또는 그 이하의)을 쓰려 한다면 open() 메소드를 사용할 수 있고 큰 파일 또는 파일 크기를 모를때는 openAsync() 메소드를 사용할 수 있습니다.

비동기 메소드에 대해 더 자세히 알고 싶다면, 아래 주소에 있는 'Programming ActionScript 3.0'의 "Handling Events" 장을 보십시오.

http://livedocs.macromedia.com/flex/2/docs/Part5_ProgAS.html

<디렉토리 컨텐츠 읽기>

File.listDirectory() 메소드는 파일과 디렉토리 리스트를 배열(Array)로 반환합니다. 다음 코드는 데스크탑 디렉토리의 컨텐츠 리스트를 보여줍니다.

var directory:File = File.desktopDirectory;
var contents:Array = directory.listDirectory();
for (var i:uint = 0; i < contents.length; i++) {
 if (contents[i].isDirectory) {
  trace(contents[i].name);
 } else {
  trace(contents[i].name,
  contents[i].size,
  "bytes");
 }
}

File.listDirectory() 메소드는 단지 루트 레벨의 파일만 반환합니다. 서브디렉토리는 검사하지 않습니다. 하지만 여러분은 File.listDirectoryAsync()를 사용해서 서브디렉토리를 통하는 코드를 작성할 수 있습니다.

5장의 "Getting a Directory Listing"을 참조하세요.

<파일 정보 얻기>

File 클래스는 파일과 디렉토리에 대한 정보를 알아내는 속성이 몇가지 있습니다.

exists
- 파일 또는 디렉토리가 존재하는지 알아냅니다.

isDirectory
- 파일 오브젝트 포인트가 디렉토리인지(true) 아닌지(false)를 반환합니다.

isHidden
- 숨김 파일 또는 디렉토리인지 알아냅니다.

nativePath
- 파일 또는 디렉토리의 경로를 나타냅니다.

parent
- 부모 디렉토리를 나타냅니다.

url
- 파일 또는 디렉토리의 경로를 나타냅니다.

File 클래스는 또한 FileReference 클래스로부터 다음의 유용한 속성들을 상속 받습니다.

creationDate
- 파일 또는 폴더가 생성된 날짜를 나타냅니다.

modificationDate
- 마지막 수정된 날짜를 나타냅니다.

name
- 파일 또는 폴더의 이름을 나타냅니다.

size
- 파일의 사이즈를 나타냅니다. (bytes)

<파일, 디렉토리의 복사 및 이동>

File.copyTo(), File.moveTo() 메소드는 파일 또는 디렉토리를 복사, 이동합니다. 다음 예는 사용자 디렉토리(Apollo Test)의 'test.txt' 파일을 어플리케이션 스토리지 디렉토리(User Data)로 복사합니다.

var file1:File = File.documentsDirectory.resolve("Apollo
Test/test.txt");
var destination:File = File.appStorageDirectory.
resolve("User Data");
destination.createDirectory( );
var file2:File = destination.resolve("test.txt");
file1.copyTo(file2);

주) 디렉토리가 존재하는지 확인하려고 File.createDirectory() 메소드 호출

다음 코드는 'Apollo Test 1' 디렉토리를 'Apollo Test 2' 디렉토리로 이동하는데 사실상 이것은 디렉토리 이름을 바꾼 것입니다.

var dir1:File = File.documentsDirectory;
dir1 = dir1.resolve("Apollo Test 1");
var dir2:File = File.documentsDirectory;
dir2 = dir2.resolve("Apollo Test 2");

복사 또는 이동이 오래 걸릴것 같다면, 위 메소드들의 비동기 버젼을 사용해도 됩니다. File.copyToAsync()와 File.moveToAsync()가 그것입니다.

각 메소드들은 'clobber'라는 파라미터가 있는데 파일을 덮어씌울때 true로 설정해서 사용할 수 있습니다. 기본값은 false 입니다.

<파일과 디렉토리의 생성>

File 클래스의 File.createTempFile()과 File.createTempDirectory() 정적 메소드는 임시 파일 또는 디렉토리를 생성하게 합니다. 아폴로는 이 메소드들에 의해 생성된 새롭고 유일한 임시 파일 또는 디렉토리를 확보합니다. 다음 코드는 임시 파일을 생성합니다.

var bufferStorage:File = File.createTempFile( );

임시 파일, 디렉토리는 아폴로 어플리케이션이 닫힐때 자동으로 삭제되지 않습니다. 어플리케이션이 닫힐때 삭제하고 싶다면 다음 섹션, "Deleting Files and Directories"를 보십시오.

File.createDirectory() 메소드는 파일 오브젝트에 의해 기술된 경로의 디렉토리에 생성합니다.

var directory = File.documentsDirectory;
directory = directory.resolve("ApolloTest");

필요에 의해 FileStream 오브젝트가 열릴때 디렉토리가 자동으로 생성되어 쓰여집니다. FileStream 오브젝트에 대해 더 자세한 내용이 필요하다면 이 장 마지막의 "Reading and Writing Files" 를 보십시오.

<파일과 디렉토리의 삭제>

File.deleteFile() 메소드는 파일을 영구 삭제하고 File.deleteDirectory() 메소드는 디렉토리를 영구 삭제합니다. File.moveToTrash() 메소드는 파일 또는 디렉토리(시스템 trash(쓰레기))를 이동합니다.

각 메소드는 비동기의 한 측면을 가집니다.

<파일 읽고 쓰기>

FileStream 클래스는 어플리케이션이 파일을 읽고 쓰도록 해줍니다.

파일을 읽고 쓰는 기본 프로세스가 다음에 있습니다.

1. 읽기, 쓰기를 원하는 파일의 지점을 셋업합니다.
자세한 내용은 이 장 초반부의 "Accessing Files and Directories"를 참고하세요.

2. FileStream 오브젝트의 예시

var stream:FileStream = new FileStream( );

3. file 파라미터와 같은 File 오브젝트와 fileMode 파라미터와 같은 적절한 파일 모드를 가지고  FileStream.open() 또는 FileStream.openAsync() 메소드를 호출

stream.open(file, FileMode.READ);

자세한 내용은 이 장 후반부의 "File Open Modes"를 참고하세요.

4. 만약 FileStream.openAsync() 메소드를 호출했다면 적절한 이벤트 리스너를 생성하십시오.
자세한 내용은 다음의 "The open() and openAsync() Methods"를 참고하세요.

5. 데이터 읽기, 쓰기 메소드를 호출하십시오.
자세한 내용은 이 장 후반부의 "Read and Write Methods"를 참고하세요.

6. FileStream.close() 메소드를 이용해 파일을 닫습니다.

코드예)
 stream.close( );

3, 4, 5 단계는 다음 섹션에 더 자세히 보실 수 있습니다. 우선, UTF-8 텍스트 파일을 동기적으로 읽는 샘플 코드를 보시죠.

var file:File = File.appStorageDirectory;
file = file.resolve("settings.xml");
var stream:FileStream = new FileStream( );
stream.open(file, FileMode.READ);
var data:String = stream.readUTFBytes(stream.
bytesAvailable);
stream.close( );

다음은 비동기로 같은 데이터를 읽습니다.

var file:File = File.appStorageDirectory;
file = file.resolve("settings.xml");
var stream:FileStream = new FileStream( );
stream.openAsync(file, FileMode.READ);
stream.addEventListener(Event.COMPLETE, readData);
var data:String;
private function readData(event:Event):void {
data = stream.readUTFBytes(stream.bytesAvailable);
stream.close( );
}

<open()과 openAsync() 메소드>

여러분의 어플리케이션은 파일의 읽고 쓰기전에 파일을 열 필요가 있습니다.

FileStream.openAsync() 메소드로 파일을 열때, 파일은 비동기로 열리고 여러분은 이벤트 리스너를 동록합니다.

FileStream.open() 메소드는 파일을 동기로 엽니다. 만약 여러분이 만든 어플리케이션이 이 동기 메소드로 파일을 연다면, 동기가 잘 완료되고 read 또는 write 메소드를 호출합니다.

다음은, 다음 호출이 생성되기 이전에 stream.open(), stream.writeUTFBytes(), and stream.close() 메소드가 완료되는 예제를 보여줍니다.

var newFile:File = File.documentsDirectory;
file = file.resolve("ApolloTest/test.txt");
var stream:FileStream = new FileStream( )
stream.open(file, FileMode.WRITE);
stream.writeUTFBytes("This is some sample text.");
stream.close( );

파일을 여는 동기 작업의 장점은 코드를 적게 쓴다는 것입니다. 단점은 다른 액션스크립트 코드의 실행이 지연될 수 있다는 것입니다. 결과적으로, 큰 파일을 가지고 작업하거나 느린 네트워크를 통해 파일을 연다면 FileStream.openAsync() 메소드를 고려해야 합니다.

다음 프로세스는 openAsync() 메소드를 사용하는 비동기에 대한 것입니다.

Closing the file
- FileStream 오브젝트는 파일이 닫힐때 close 이벤트를 발생합니다.

Reading data into the read buffer
- FileStream 오브젝트는 데이터를 읽을때 progress 이벤트를 발생하고, 모두 읽으면 complete 이벤트를 발생합니다. 단지 데이터를 읽는거라면 readBytes()와 같은 동기 메소드를 호출합니다.

I/O errors
- FileStream 오브젝트는 에러를 만나면 ioError 이벤트를 발생시킵니다. 이것은 몇가지 이유로 발생하는데, 파일이 없거나 읽기전용(쓰기방지)일 경우와 같은 것들입니다. 몇몇 에러들은 예외를 던지거나, 파일이 열려있지 않았을때도 발생합니다.

FileStream.openAsync() 메소드를 호출하기 전에 어플리케이션은 이벤트를 받을 이벤트 리스너 함수를 등록합니다. 다음 예는 비동기로 파일을 읽습니다. 파일이 열린 후, complete 이벤트가 발생합니다.(만약 에러가 발생한다면, ioError 이벤트가 발생합니다)
completeHandler() 메소드가 FileStream을 호출합니다. readBytes() 메소드는 비동기로 바이트의 배열과 같은 파일로 부터 데이터를 받습니다. 파일을 다 받으면 complete 이벤트가 발생합니다.

var file:File = File.documentsDirectory.
resolve("ApolloTest/test.txt");
var stream:FileStream = new FileStream( );
stream.addEventListener(ProgressEvent.PROGRESS,
progressHandler);
stream.addEventListener(Event.COMPLETE, completeHandler);
stream.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
stream.addEventListener(Event.CLOSE, closeHandler);
stream.openAsync(file, FileMode.READ);
var data:ByteArray = new ByteArray( );
private function progressHandler(event:ProgressEvent):void {
 trace(stream.bytesAvailable, "bytes read.");
}
private function completeHandler(event: Event):void {
 data = stream.readBytes(stream.bytesAvailable);
 stream.close( );
}
private function ioErrorHandler(event:IOErrorEvent):void {
 trace("An I/O error was encountered.");
}
private function closeHandler(event: Event):void {
 trace("File closed.");
}

<파일 열기 모드>

FileStream.open()과 FileStream.openAsync() 메소드는 둘 다 두개의 파라미터를 가집니다. file 파라미터는 열기 원하는 파일을, fileMode 파라미터는 FileStream 오브젝트의 string 정의입니다. fileMode 파라미터는 FileMode 클래스에서 상수로 정의합니다.

다음 코드는 동기로 파일을 엽니다. 하지만 읽지는 않습니다.

stream.open(file, FileMode.WRITE);

여기 FileMode 상수를 정리했습니다.

FileMode.APPEND
- 쓰기전용 모드로 파일을 엽니다. 파일을 열때 파일이 없다면 생성합니다.

FileMode.READ
- 읽기전용 모드로 파일을 엽니다. 파일이 반드시 있어야 합니다.(없어도 생성하지 않습니다)

FileMode.UPDATE
- 읽기/쓰기 모드로 파일을 엽니다. 파일을 수정할 수 있습니다. 파일을 열때 파일이 없다면 생성합니다.

FileMode.WRITE
- 쓰기전용 모드로 파일을 엽니다. 파일이 없다면 생성합니다. 파일이 있다면 덮어쓰기 합니다.

<읽기와 쓰기 메소드>

FileStream 클래스는 읽기, 쓰기 메소드를 몇개 가지고 있습니다. 예를 들면, 바이트의 배열을 읽고 쓰기위해 readUTFBytes()와 writeUTFBytes() 메소드를 사용할 수 있습니다. 그에 반해 readByte()와 writeByte() 메소드는 싱글 바이트를 읽고 씁니다. 모두, 26개의 읽기, 쓰기 메소드가 있습니다. 자세한 내용은 "ActionScript 3.0 Language Reference"의 이 메소드들에 대해 읽어 보십시오.

readUTFBytes()와 writeUTFBytes() 메소드는 UTF-8로 인코딩 된 텍스트를 읽고 씁니다. readMultiByte()와 writeMultiByte() 메소드는 여러가지로 인코딩된 피일에 쓰입니다. 다음 예에서, UTF 파일은 UTF로 인코딩 된 UTF byte order mark (BOM) 문자를 가지고 시작합니다.

자세한 내용을 원한다면, Apollo Developer's Guide (http://www.adobe.com/go/apollodocs)의 "Data formats, and choosing the read and write methods to use"를 참고하십시오.

신고
Posted by 원강민
Adobe AIR2007.11.14 19:28

AIR는 현재 플래시CS3, 플렉스 빌더3, 드림위버CS3에서 개발이 가능합니다..
[시험버젼을 다운 받으시려면 어도비 사이트에 가입하셔야 합니다.]

공통 파일 ==================================

more..

플래시로 개발할 경우 =======================

more..

플렉스 빌더로 개발할 경우 ===================

more..

드림위버로 개발할 경우 ======================

more..



AIR SDK에는 개발에 필요한 기본적인 내용들이 들어 있습니다..하지만 이왕이면 위의 툴을 이용한 개발을 추천합니다..(당연히 실무에서도 툴을 사용합니다..)

[AIR SDK]
http://labs.adobe.com/downloads/airsdk.html


너무 복잡하죠? 저는 주로 플렉스 빌더3에서 개발하는데요..첨 하시는 분들에게 강력 추천합니다..플래시보다 단순하고 HTML, JS로 개발하는 것보다 쉽기 때문이죠..

공통의 AIR 런타임 받으시고 플렉스 빌더 3 받아서 설치하시면 됩니다..

신고
Posted by 원강민
Adobe AIR2007.11.13 22:37

AIR 베타2가 발표된지도 좀 됐네요..

그동안 이것저것 테스트 해보며 참 좋다는 느낌이 팍 왔습니다..

플렉스 뿐만 아니라 플래시에서도 개발이 가능해 졌고,

System Tray(맥은 Dock)에 notifyIcon도 생성되며,

시스템 클립보드 사용, 윈도우 z-index 조정 가능, Drag and Drop, 암호화된 로컬 저장소, ..

또한 플래시의 기본 오른쪽 버튼 메뉴가 사라졌죠..

특히나 SQLite 지원으로 인해 데이터베이스 지향 어플리케이션에 막강한 힘이 생겼습니다..

AS3의 강력한 API와 결합해 빠르고 강력한 데스크탑 어플리케이션을 개발할 수 있는 AIR..

정식버젼이 기대됩니다!! ^____^)b

신고
Posted by 원강민
Adobe AIR2007.11.13 22:36
Adobe AIR2007.11.13 22:31

"아래 내용은 AIR 문서에서 발췌한 것으로 AIR 프로젝트를 생성하면 자동으로 만들어지는 XXX-app.xml을 생성하는 내용입니다..

우리는 기본적으로 xml 파일을 직접 만들 필요가 없으므로 아래 내용을 통해 XXX-app.xml이 어떠한 내용이구나..하는 정도로 이해하시면 됩니다.."


<어플리케이션 XML 파일>

각 AIR 어플리케이션은 어플리케이션 기술 파일을 요구합니다. 이 XML 파일은 어플리케이션의 다양한 속성을 정의하고, 사용자들에게 배포되는 AIR 패키지에 포함됩니다.

1. 다음의 구조를 가진 HelloAIR-app.xml 파일을 만듭니다.
<application>
  <name>…</name>
  <initialWindow>
    <content>…</content>
    <visible>…</visible>
  </initialWindow>
</application>

2. 이하의 속성들을 <application> 요소에 설정합니다.

- 어플리케이션 ID : appId="samples.HelloAIR"

어플리케이션 ID는 설치, 개인의 응용 파일-시스템 저장 디렉토리로의 접근, 개인의 암호화되었던 저장 장소로의 접근과 어플리케이션 통신을 위해 사용됩니다.

Note: 현재 AIR 베타에서는 동일한 어플리케이션 ID를 사용하는 어플리케이션에 대해서는 덮어쓰기를 적용합니다.

- AIR 네임스페이스 : xmlns="http://ns.adobe.com/air/application/1.0.M5"

- 어플리케이션 버젼 : version="0.1"

3. <name> 요소 추가.

- 어플리케이션 이름 : <name>Hello AIR!</name>

4. 당신의 어플리케이션 윈도우가 표시될 방법을 기술하는 <initialWindow> 요소를 설정합니다.

- 어플리케이션 가시화 : <visible>true</true>

- html 파일 : <content>HelloAIR.html</content>

5. 파일을 저장하세요. 제대로 작성한 어플리케이션 XML 파일은 아래와 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://ns.adobe.com/air/application/1.0.M5"
appId="samples.HelloWeb" version="0.1">
  <name>Hello AIR!</name>
  <initialWindow>
  <content>HelloAIR.html</content>
  <visible>true</visible>
</application>

신고
Posted by 원강민