У меня есть открытый вордовский файл. Хочу считать с него данные. Пишу следующий логичный код :
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>>
Здравствуйте, 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);
Здравствуйте, 323066, Вы писали:
3>У меня есть открытый вордовский файл. Хочу считать с него данные. Пишу следующий логичный код :
3> ....
3>Я бы решил что на этом все, однако аналогичный код в java с использованием InputStream работает нормально. Как мне решить эту проблему?
Может проще присоединиться к открытому ворду и считать данные оттуда ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, 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