2009-09-01 2 views
1

StreamReader를 사용하여 텍스트 파일에서 데이터를 읽는 C# 코드가 있습니다. 한 컴퓨터에서 텍스트 파일을 삭제하거나 다른 텍스트 파일로 바꾼 후에도 텍스트 파일에서 데이터를 읽을 수 있습니다. File.Exists 호출은 Windows 탐색기에없는 경우에도 파일이 있음을보고합니다. 그러나 다른 컴퓨터에서는이 동작이 발생하지 않습니다. 두 컴퓨터 모두 Vista Business 및 .NET 2.0.50727 SP2를 실행 중입니다.C#은 존재하지 않는 파일에서 읽을 수 있습니까?

해결하지 않고 컴퓨터를 다시 시작하려고했습니다.

가능할 수있는 방법에 대한 이해와 가능한 해결책에 대한 정보를 누구나 알고 있습니까?

감사합니다,

+0

PC 중 하나가 64 비트 컴퓨터입니까? –

+0

파일 경로가 루트 상대 경로입니까 (절대 경로)? – adatapost

+0

사용중인 "File.Exists"코드 표시 – kloucks

답변

2

앨런이는 folder virtualization 문제가 될 수 있을까?

+0

그건 내 첫 번째 추측이 될 것입니다. –

+0

도움을 주셔서 감사합니다. 폴더 가상화로 인해 충돌이 발생했습니다. –

+0

비스타는 정말 우스웠다. 폴더 가상화에 대해 전혀 몰랐다. 링크에서 기사를 읽은 후 프로그래머가 무엇이 잘못되었는지 이해하려고 노력할 수 있다는 것을 웃게했다 !! –

4

MSDN

에서 경로에 지정된 파일이 존재하는 경우이 방법은 단지 확인, 방법은 패스의 검증에 사용되어서는 안된다 존재한다.
Exists 메서드를 호출하고 파일에서 다른 작업 (예 : 삭제)을 수행 할 때까지 다른 프로세스에서 파일을 사용하여 작업을 수행 할 수 있습니다. 권장되는 프로그래밍 방법은 예제에 표시된대로 Exists 메서드와 try ... catch 블록에서 파일에 대해 수행 한 작업을 래핑하는 것입니다. 잠재적 인 갈등의 범위를 좁히는 데 도움이됩니다. Exists 메서드는 파일을 사용할 수 있는지 확인하는 데 도움이되지만 보장 할 수는 없습니다.

0

파일을 삭제하기 전에 열어 볼 수 있습니까? 그렇다면, 파일 시스템이 그렇지 않으면 열어 놓은 파일에서 여전히 읽을 수 있다는 것은 예상치 못한 일이 아닙니다.

RE : File.Exists() :

File.Exists는-조건을 경주 본질적 경향이있다. 일부 작업을 수행하기 전에 파일이 존재하는지 또는 존재하지 않는지를 확인하는 독점적 인 방법으로 사용해서는 안됩니다. 이 실수로 인해 소프트웨어에 보안 결함이 발생할 수 있습니다.

열려있는 실제 파일 작업에서 발생할 수있는 예외를 항상 처리하고 파일이 열리면 입력을 확인하십시오.

관련 문제