Próbuję otworzyć plik do jednoczesnego pisania i czytania w oknach. Mam jeden program, który zapisuje (co jedną sekundę) do pliku i czyta z niego. W systemie Unix działa idealnie, ale nie działa w oknach (nie mogę otworzyć już otwartego pliku). Otwieram plik za pomocą fopen().(Windows) Otwórz ten sam plik jednocześnie
Jak mogę rozwiązać ten problem?
EDIT2:
Wyjazd _fsopen
używa FILE *
i ustaw flagę zakładowego odpowiednio.
EDIT:
Przede wszystkim jakiś kod: to jest jak kiedyś otworzyć plik
FILE* f = NULL;
int res = fopen_s(&f, "c:\\temp\\File1.txt", "w");
if (res != 0) return;
while (true) {
Sleep(1000);
fprintf_s(f , "Some data");
}
fclose(f);
Odczyt był w drugiej applicaiton, ale to nie fscanf
zamiast.
Stała Kod:
char d[] = "data";
HANDLE h = CreateFile("c:\\temp\\f.txt", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, /*FILE_ATTRIBUTE_NORMAL*/ FILE_FLAG_WRITE_THROUGH, NULL);
if (h == INVALID_HANDLE_VALUE) return 0;
DWORD bytesW;
while(true) {
Sleep(100);
WriteFile(h, d, strlen(d), &bytesW, NULL);
}
CloseHandle(h);
return 0;
Może to pomoże: http://stackoverflow.com/questions/11566930/can-i-allow-multiple-programs-to-read-from-the-same-file-at-the-same-time – Nim
Może dodać prosty przykład (jak po prostu otwórz i śpij) programy działające na Uniksie, więc łatwiej jest komuś zrobić kod Win tak samo. – hyde
Proszę pokazać kod. Szybki test na VS 2008 do VS 2012 wskazuje, że nie ma problemu z użyciem 'fopen()' do otwarcia pliku do zapisu i odczytu w tym samym czasie ('fopen()' używa dostępu 'FILE_SHARE_READ | FILE_SHARE_WRITE'. –