Witam
Używamy dwóch liczników do unikalnego nazywania plików CAD, które zapisujemy w repozytorium ePDM (P-XXXXXX.sldprt i A-XXXXXX.sldasm). Wszystkie nasze pliki CAD są bez wyjątku archiwizowane w skarbcu.
Rozwijam wewnętrzną aplikację, która będzie generować nowe pliki, które będą musiały zostać zapisane w skarbcu. Potrzebuję więc dostępu do liczników.
Chciałbym to zrobić poprawnie, to znaczy nie pisać bezpośrednio w plikach XML. Inaczej nie byłbym w stanie nic powiedzieć na temat konkurencyjnego dostępu tych liczników.
Odkryłem obecność pliku SmartCounter.dll. Cóż za ciekawa nazwa, prawda? Czy jest jakaś powiązana dokumentacja?
Pozdrowienia
Witam
Jeśli tworzysz aplikację za pośrednictwem API PDM, o ile się nie mylę, możesz zajrzeć do pomocy po stronie GetSerialNumberNames, pozwala ona na dostęp do liczników.
1 polubienie
Witam
Aby pobrać numer z ePDM , zobacz przykład : Tworzenie numerów seryjnych
a także przykład na dole tej strony: Właściwość wartości
Witam
Dziękuję za odpowiedzi i przepraszam za brak precyzji. Nasz numer licznika jest nadawany przez smartproperty i nie korzysta z narzędzi EPDM, takich jak numery seryjne. Liczniki są definiowane w pliku xml przechowywanym poza repozytorium (w udziale systemu Windows).
<Counters>
<Counter name="NomFichierPrt" id="Incrementing0" Auto="0" AutoName="" type="1">
<Value value="55413" StartValue="0" step="1" />
<Custom value="" SeparatorList=";" LinkFileList="False" />
<Format value="P-0000000#" />
</Counter>
<Counter name="Incrementing" id="Incrementing" Auto="0" AutoName="" type="1">
<Value value="0" StartValue="0" step="0" />
<Custom value="" SeparatorList=";" LinkFileList="False" />
<Format value="0#" />
</Counter>
<Counter name="NomFichierAsm" id="Incrementing1" Auto="0" AutoName="" type="1">
<Value value="86557" StartValue="0" step="1" />
<Custom value="" SeparatorList=";" LinkFileList="False" />
<Format value="A-0000000#" />
</Counter>
</Counters>
W tym przypadku plik xml jest do tego przeznaczony.
Po prostu zwiększ 'Value value="55413" ' w polu
Czy zapisujemy bezpośrednio do pliku? Czy nie ma ryzyka związanego z równoczesnym dostępem? Czy muszę utworzyć plik blokady ".lock"?
używa FileShare.None:
bool success = false;
while (!success)
{
try
{
using(Stream file = new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
// Read current content from file.
// Make changes
// Save new content to file.
}
success = true;
}
catch(IOException e)
{
// Someone else was modifying the file or another IO exception.
}
}
OK. Myślę, że to wystarczy.
Dodam komentarz "opinię", gdy zrobię postęp w moim devie.
Dziękuję i życzę miłego weekendu.