programing

다른 응용 프로그램에서 열려 있는 파일을 열려면 어떻게 해야 합니까?

jooyons 2023. 4. 15. 08:45
반응형

다른 응용 프로그램에서 열려 있는 파일을 열려면 어떻게 해야 합니까?

저는 분석을 위해 엑셀 파일에 로딩되는 윈폼 애플리케이션을 가지고 있습니다.현재 Excel 파일을 열려면 파일이 이미 Excel로 열려 있지 않아야 합니다. 그렇지 않으면 파일IOException은 파일에 로드하려고 하면 느려집니다.

사용자가 먼저 워크시트를 강제로 닫는 것이 아니라 앱이 엑셀로 열려 있어도 파일을 읽을 수 있도록 하고 싶습니다.문제의 애플리케이션은, 파일을 읽기만 하면 되는 것에 주의해 주세요.

이게 가능합니까?

FileShare를 전달해 볼 수 있습니다.파일을 열 때 읽기쓰기:

using (var stream = new FileStream(
       @"d:\myfile.xls", 
       FileMode.Open, 
       FileAccess.Read, 
       FileShare.ReadWrite))
{

}

파일을 어떻게 열려고 하는 겁니까?

읽기/쓰기용으로 열려고 하면 예외가 발생합니다.읽기 전용으로 열려고 하면 문제가 없습니다.

var file = File.Open("file.xls", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

이것은 Excel이 파일을 열었을 경우에만 작동합니다.FileShare.Read다른 애플리케이션(즉,의 애플리케이션)이 파일에 액세스 할 수 있도록 설정합니다.설정되지 않은 경우 Excel이 독점 액세스로 파일을 열게 됩니다.주의: 엑셀 파일(엑셀)은 다른 사람이 편집을 위해 열어두면 읽을 수 있기 때문에 그렇지 않다고 생각합니다.

업데이트 - OK Darin의 코멘트가 있을 때까지 제대로 테스트하지 않았습니다.필요한 것은FileShare.ReadWrite다음 파일 열기용임을 나타내는 도움말에도 불구하고 플래그를 표시합니다.전혀 아니다FileShare.Read그 정도면 충분해, 난 그게 더 역겹다고 생각해.

용 스프레드시트 기어.NET은 Excel이 워크북을 열어 놓은 상태에서 워크북을 읽을 수 있습니다.다음은 이 작업에 사용하는 코드입니다(읽는 동안 Excel이나 다른 앱이 쓰이지 않도록 파일을 연 후 전체 파일을 잠급니다).

stream = new System.IO.FileStream(path,
    System.IO.FileMode.Open,
    System.IO.FileAccess.Read,
    System.IO.FileShare.ReadWrite,
    SG.CompoundDocumentIO.Storage.OpenBufferLength);
try
{
    stream.Lock(0, stream.Length);
}
catch
{
    // .NET 1.1 requires cast to IDisposable
    ((IDisposable)stream).Dispose();
    throw;
}

면책사항:SpreadsheetGear LLC를 소유하고 있습니다.

이미 열려 있는 파일을 복사하여 읽고 폐기해 보십시오.파일이 이미 열려 있는지 확인하기 위해 읽고 복사, 읽기, 삭제를 수행하여 예외를 처리합니다.

언급URL : https://stackoverflow.com/questions/1048225/how-do-i-open-a-file-that-is-opened-in-another-application

반응형