PDA

View Full Version : [C++ e C#] accessi NON concorrenti


andreapav
12-03-2009, 16:28
Ciao a tutti... io ho un problema che dovrebbe essere banale ma in realtą non ci riesco!!
Ho 2 programmi in esecuzione, uno in C++ e uno in C# e in pratica quello in C# prepara un file che viene letto dal C++.
Io non voglio che entrambe i programmi accedano in modo concorrente allo stesso file!! ma sembra che non riesca a fermarli in tempo... :confused:

in C# ho usato queste righe di codice:

FileStream fs = new FileStream("DataIN.dat", FileMode.Open, FileAccess.Read, FileShare.None);
if (fs.CanRead == false)
{
lblStatusBar.Text = "DataIN opened";
}

in C++ questo:

ifstream in;
in.open("DataIN.dat", ios::in);
if (in.is_open())
cout << "!!aperto!!";

Cosa sbaglio??

andreapav
12-03-2009, 16:35
rettifico un attimo: in C# con

try
{
FileStream fs = new FileStream("DataIN.dat", FileMode.Open, FileAccess.Read, FileShare.None);
if (fs.CanRead == false)
{
lblStatusBar.Text = "DataIN opened";
}
else
{
lblStatusBar.Text = "DataIN libero";
}
fs.Close();
}
catch
{
lblStatusBar.Text = "DataIN opened";
}

funziona!

Resta il problema che il C++ ci va dentro lo stesso!

cionci
12-03-2009, 18:11
Per fare un lock a livello di file devi usare le primitive del sistema operativo ospite o al limite un qualche framework di pił alto livello rispetto alla libreria standard del C++.

andreapav
12-03-2009, 19:50
Per fare un lock a livello di file devi usare le primitive del sistema operativo ospite o al limite un qualche framework di pił alto livello rispetto alla libreria standard del C++.

oddio...quindi...lavorando sotto windows dovrei cercami la libreria di windows che controlla sta roba?

Nessuno ha mai usato sta roba? o sono l'unico?!?! :doh:

cionci
13-03-2009, 11:12
Sotto Windows: http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx

dwShareMode lo metti a 0