Как в C# считать данные из открытого doc файла?
От: 323066  
Дата: 04.04.07 08:25
Оценка: :)
У меня есть открытый вордовский файл. Хочу считать с него данные. Пишу следующий логичный код :

const string FILE_NAME = "c://temp//111.doc";
try
{
StreamReader sr = new StreamReader("c://temp//111.doc");
}
catch(Exception e)
{
//System.Diagnostics.Debugger.Break();
Console.WriteLine(e.Message);
}

System.IO.IOException: The process cannot access the file "c:\temp\111.doc" beca
use it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String str)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access,
FileShare share, Int32 bufferSize, Boolean useAsync, String msgPath, Boolean bFr
omProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access,
FileShare share, Int32 bufferSize)
at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detec
tEncodingFromByteOrderMarks, Int32 bufferSize)
at System.IO.StreamReader..ctor(String path)
at ConsoleApplication1.Class1.Main(String[] args) in c:\inetpub\wwwroot\conso
leapplication1\class1.cs:line 20


Я бы решил что на этом все, однако аналогичный код в java с использованием InputStream работает нормально. Как мне решить эту проблему?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Как в C# считать данные из открытого doc файла?
От: AngeL B. Россия  
Дата: 04.04.07 08:44
Оценка:
Здравствуйте, 323066, Вы писали:

3>У меня есть открытый вордовский файл. Хочу считать с него данные. Пишу следующий логичный код :


3> const string FILE_NAME = "c://temp//111.doc";

3> try
3> {
3> StreamReader sr = new StreamReader("c://temp//111.doc");
3> }
3> catch(Exception e)
3> {
3> //System.Diagnostics.Debugger.Break();
3> Console.WriteLine(e.Message);
3> }

Во-первых, класс StreamReader предназначен для чтения текстовых файлов в различной кодировке. Так что для двоичного формата .doc он подходит мало. Ты скорее всего мусор получишь при чтении.
Во-вторых, конструктор пытается открыть файл в эксклюзивном режиме, а это невозможно, т.к. он уже открыт вордом. Попробуй так

  Stream stream = new FileStream(<имя файла>, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete);
Re: Как в C# считать данные из открытого doc файла?
От: aleks_malcev Беларусь  
Дата: 04.04.07 08:44
Оценка:
Здравствуйте, 323066, Вы писали:

3>У меня есть открытый вордовский файл. Хочу считать с него данные. Пишу следующий логичный код :


3>System.IO.IOException: The process cannot access the file "c:\temp\111.doc" beca

3>use it is being used by another process.


Думаю надо открыть файл с FileShare.ReadWrite, недавно что то похожее обсуждалось
Re: Как в C# считать данные из открытого doc файла?
От: Alexey_N  
Дата: 04.04.07 11:59
Оценка:
Здравствуйте, 323066, Вы писали:

3>У меня есть открытый вордовский файл. Хочу считать с него данные. Пишу следующий логичный код :


3> ....


3>Я бы решил что на этом все, однако аналогичный код в java с использованием InputStream работает нормально. Как мне решить эту проблему?


Может проще присоединиться к открытому ворду и считать данные оттуда ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Как в C# считать данные из открытого doc файла?
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.04.07 07:09
Оценка: 6 (1)
Здравствуйте, 323066, Вы писали:

3>У меня есть открытый вордовский файл. Хочу считать с него данные. Пишу следующий логичный код :

Совершенно нелогичный. Во-первых, сначала объявляется константа (надо полагать, чтобы избежать copy-paste), и сразу же нигде не используется.
Во-вторых, почему-то удвоены прямые слеши, хотя делать этого явно не надо: только обратные слеши являются спецсимволами в строковых константах.
Во-третьих, почему-то бинарный файл читают текстовым ридером.
В четвертых. почему-то делается наивное предположение, что файл удастся открыть с избыточными привилегиями. Короче, нужно так:

const string FILE_NAME = @"c:\temp\111.doc";
try
{
  Stream s = File.OpenRead(FILE_NAME);
}
catch(Exception e)
{
    //System.Diagnostics.Debugger.Break();
    Console.WriteLine(e.Message);
}
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.