2013-02-07 20 views
6

मैं विंडोज़ में एक साथ लिखने और पढ़ने के लिए एक फ़ाइल खोलने की कोशिश कर रहा हूं। मेरे पास एक प्रोग्राम है जो फ़ाइल में (प्रत्येक एक सेकेंड) लिखता है और जो इसे पढ़ता है। यूनिक्स में यह पहले से काम करता है लेकिन यह विंडोज़ में काम नहीं करता है (मैं पहले से खोला गया फाइल नहीं खोल सकता)। मैं फ़ाइल को fopen() के साथ खोलता हूं।(विंडोज़) एक ही फाइल को एक साथ खोलें

मैं इस समस्या को कैसे हल कर सकता हूं?

EDIT2:

जांच _fsopen यह FILE * का उपयोग करता है, और साझा झंडा अनुसार सेट।

संपादित करें:

सबसे पहले, कुछ कोड: यह कैसे मैं फ़ाइल

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); 

पढ़ा अन्य applicaiton में था खोलने के लिए किया है, लेकिन यह fscanf बजाय किया है।

तय कोड:

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; 
+1

शायद इससे मदद मिलेगी: http://stackoverflow.com/questions/11566930/can-i-allow-multiple-programs-to-read-from-the-same-file-at-the-same-time – Nim

+0

शायद यूनिक्स पर काम करने वाले सरल उदाहरण (जैसे खुले और नींद) प्रोग्राम जोड़ें, इसलिए किसी के लिए विन कोड करने के लिए यह आसान है। – hyde

+2

कृपया कोड दिखाएं। वीएस 2008 के माध्यम से वीएस 2008 के माध्यम से एक त्वरित परीक्षण इंगित करता है कि 'fopen() 'को फ़ाइल लिखने और पढ़ने के लिए फ़ाइल खोलने में कोई समस्या नहीं है (' fopen() '' FILE_SHARE_READ | FILE_SHARE_WRITE' पहुंच का उपयोग करता है)। –

उत्तर

3

दोनों विंडोज और लिनक्स एक फ़ाइल है, जो fopen डिफ़ॉल्ट रूप से उपयोग करता खोलने का एक डिफ़ॉल्ट रास्ता नहीं है।

विंडोज़ में, इसका मतलब है अवरुद्ध करना (केवल एक प्रक्रिया एक समय में एक फ़ाइल खोल सकती है)।

लिनक्स में, इसका अर्थ गैर-अवरोधन है।

fopen एक उच्च स्तरीय एपीआई है। फ़ाइल पर ब्लॉकिंग नीति को चुनने के लिए, विंडोज़ के लिए आपको WinAPI से OpenFile का उपयोग करना चाहिए। विशेष रूप से, OF_SHARE_* झंडे पर एक नज़र डालें।

+4

यह उत्तर सही नहीं है - विंडोज़ पर 'fopen() 'फ़ाइल साझा करने के साथ फ़ाइल खोलता है। –

+0

@ माइकलबुर: आप सही हैं, मैंने निश्चित कोड संलग्न किया है। –

+0

ओपनफाइल प्राचीन फ़ंक्शन नहीं था जिसे CreateFile द्वारा प्रतिस्थापित किया गया था? – Joey

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^