2012-10-06 2 views
2

내가 파일을 열 싶습니다 만들어 졌음을 알 수없는 경우 파일을 생성하고, 존재하지 않는 경우 this 질문은 존재하고 파일이

캐치로, 유사한를 만들 WinRT 파일이 새로 생성 된 경우 몇 가지 추가 초기화 논리를 수행합니다.

나는 이미 존재하는 경우

await folder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists)

이 파일을 열 때 사용할 수 있지만,이 작업의 결과가 새로 파일을 생성하거나 기존 파일을 열 경우 어떻게 알 수 있습니까? 여기에 모범 사례가 있습니까? 아니면 파일 생성 날짜 또는 파일 크기를 보지 못했습니다. CreatedDate 또는 파일의 Size을 찾고보다 다른 일이 있는지 알 수있는 방법이없는 CreationCollsionOption.OpenIfExists를 사용하여

var file = await folder.CreateFileAsync(fileName, CreationCollsionOption.OpenIfExists); 

//How can I reliably tell if the file was new? 
if (fileIsNew) 
    await InitializeFile(file); 

답변

1

:

이상적 코드는 다음과 같을 것이다.

그래서 난 당신이 사용하는 경우가 더 나은 생각 GetFileAsync합니다 (linked question에서처럼) 더 File.Exists in WinRt

이 없기 때문에 catch FileNotFoundException 지점에 initilaize 로직을 그러나 당신이 열거 세 번째 해결책이 디렉토리에있는 파일 손으로 존재를 확인 :

var files = await folder.GetFilesAsync(CommonFileQuery.OrderByName); 
var file = files.FirstOrDefault(x => x.Name == fileName); 
if (file == null) 
{ 
    file = await GetFilesAsync(fileName); 
    await InitializeFile(file);  
} 

주 : 당신은 당신이 파일 목록 누군가가 전에 파일을 작성 처리하는 동안이 (일어날 수 becase 경쟁 조건을 처리하기 위해 준비해야 할 가능성이 경우에 그건 뭐야? y가 없습니다 File.Exists 메서드가 있습니다.

+0

catch 블록 내부에서 기다릴 수없는 경우 FileNotFoundException을 처리하는 방법에 대한 제안 사항은 무엇입니까? – cordialgerm

+0

다음 플래그를 설정합니다. catch 블록의'fileNotExtists'를'true'로 설정 한 다음 플래그를 기반으로하는 캐치 외부에서 '기다리는'수 있습니다 ... – nemesv

+0

감사합니다 .. 조금 분명합니다 .. 늦어 져야합니다. – cordialgerm

1

나는 앱이 처음으로 실행되는지를 확인하고 싶었던 비슷한 상황이었습니다. 방법은 다음과 같습니다.

try 
{ 
    await ApplicationData.Current.LocalFolder.GetFileAsync(FirstRunFile); 
} 
catch (FileNotFoundException) 
{ 
    isFirstRun = true; 
} 

if (isFirstRun) { 
    // Perform necessary initialization here 
    await ApplicationData.Current.LocalFolder.CreateFileAsync(FirstRunFile); 
} 
관련 문제