C# .net DLL дает отклонен доступа к файлу при вызове из стороннего приложения [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 C# .net DLL дает отклонен доступа к файлу при вызове из стороннего приложения [закрыто]

Сообщение Anonymous »

Я использую программное обеспечение SCADA (Aveva Intouch HMI), которое поддерживает импорт библиотек .NET в качестве файлов .dll для использования более быстрых пользовательских функций в своей среде сценариев (я считаю, что они поддерживают vb.net; я использовал C# и составил его в библиотеку .NET DLL). < /p>
Я написал код, который читает файл в библиотеке в библиотеке. Он работает нормально, пока я не попытаюсь прочитать тот же файл, который время выполнения SCADA использует для регистрации исторических данных. Как только программное обеспечение SCADA прекратит регистрацию в этом файле, я могу получить доступ и прочитать его содержимое. Однако странно то, что я могу открыть один и тот же файл, используя блокнот (внешний процесс). Но если я попытаюсь открыть его, используя запускаемый скрипт из самой среды выполнения SCADA, я получаю следующее исключение: < /p>

Процесс не может получить доступ к файлу, потому что он используется другим процессом. Есть обходной путь? Мне нужно открыть этот файл, используя мои внешние библиотеки для выполнения критического анализа. Однако, если я попытаюсь открыть его из запускаемого сценария - например, нажав кнопку, он бросает исключение. < /P>
/*C# Code:************************************************/

public class IntResult
{
public string ErrorMessage { get; internal set; }
public int Result { get; internal set; }
}

public static class LGHFile
{
// This pattern mark the start of every block in the log file
readonly private static byte[] _blockStartPattern = new byte[] { 0xBC, 0x1B, 0x02, 0x00, 0x16, 0x00, 0x00, 0x00, 0x70, 0xB6, 0x32, 0x07, 0x70, 0x33, 0xDC, 0x01};

public static IntResult FindPattern(int startSearch, string path)
{
IntResult intResult = new IntResult();
intResult.Result = -1;
intResult.ErrorMessage = "No Error";

FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);

try
{
byte[] data = new byte[1000000];
fileStream.Read(data, 0, 1000000);

int patternAddress = -1;

for (int i = startSearch; i < data.Length - _blockStartPattern.Length + 1; i++)
{
bool found = true;

for (int j = 0; j < _blockStartPattern.Length; j++)
{
if (data[i + j] != _blockStartPattern[j])
{
found = false;
break;
}

}

if (found)
{
patternAddress = i;
break;
}
}

intResult.Result = patternAddress;

fileStream.Close();
}
catch (System.Exception ex)
{
intResult.ErrorMessage = ex.Message;

fileStream.Close();
}

return intResult;

}
}
< /code>
Это код Scada: < /p>
// SCADA Script Execute when click on the push
dim result as VAInTouchTools.Wrapper.IntResult;

result = VAInTouchTools.Wrapper.LGHFile.FindPattern(VA_INT_TAG_NUMBER_09, "E:\\Projects\\TopNav_004\\25100500.lgh");

VA_INT_TAG_NUMBER_10 = result.Result;

TextBox1.Text = result.ErrorMessage;


Подробнее здесь: https://stackoverflow.com/questions/797 ... -applicati
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»