Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Otwiera strumień z udostępnianiem plików.
Składnia
FILE *_fsopen(
const char *filename,
const char *mode,
int shflag
);
FILE *_wfsopen(
const wchar_t *filename,
const wchar_t *mode,
int shflag
);
Parametry
filename
Nazwa pliku do otwarcia.
mode
Typ dozwolonego dostępu.
shflag
Dozwolony typ udostępniania.
Wartość zwracana
Każda z tych funkcji zwraca wskaźnik do strumienia. Wartość wskaźnika o wartości null wskazuje błąd. Jeśli filename ciąg lub mode jest NULL pusty, te funkcje wywołują nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonanie jest dozwolone do kontynuowania, te funkcje zwracają NULL i ustawiają wartość errnoEINVAL.
Aby uzyskać więcej informacji na temat tych i innych kodów błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.
Uwagi
Funkcja _fsopen otwiera plik określony filename przez jako strumień i przygotowuje plik do późniejszego wspólnego odczytu lub zapisu, zgodnie z definicją w trybie i shflag argumentach.
_wfsopenjest wersją wieloznakową ; _fsopenfilename argumenty i mode to _wfsopen ciągi szerokoznakowe.
_wfsopen i _fsopen zachowywać się identycznie inaczej.
Ciąg mode znaków określa typ dostępu żądanego dla pliku, jak pokazano w poniższej tabeli.
| Termin | Definicja |
|---|---|
"r" |
Otwiera plik do czytania. Jeśli plik nie istnieje lub nie można go odnaleźć, _fsopen wywołanie nie powiedzie się. |
"w" |
Otwiera pusty plik do zapisu. Jeśli dany plik istnieje, jego zawartość zostanie zniszczona. |
"a" |
Otwiera plik do zapisu na końcu pliku (dołączanie); najpierw tworzy plik, jeśli nie istnieje. |
"r+" |
Otwiera plik zarówno do czytania, jak i zapisu. (Plik musi istnieć). |
"w+" |
Otwiera pusty plik do odczytu i zapisu. Jeśli dany plik istnieje, jego zawartość zostanie zniszczona. |
"a+" |
Otwiera do odczytu i dołączania; najpierw tworzy plik, jeśli nie istnieje. |
w z rozwagą, ponieważ mogą zniszczyć istniejące pliki.
Po otwarciu pliku z typem dostępu "a" lub "a+" wszystkie operacje zapisu są wykonywane na końcu pliku. Wskaźnik pliku można zmienić przy użyciu polecenia fseek lub rewind, ale zawsze jest przenoszony z powrotem na koniec pliku, zanim zostanie przeprowadzona jakakolwiek operacja zapisu. W związku z tym istniejące dane nie mogą być zastępowane. Po określeniu typu dostępu "r+", "w+" lub "a+" , zarówno odczyt, jak i zapis są dozwolone (plik ma być otwarty do aktualizacji). Jednak podczas przełączania między odczytem i zapisem musi istnieć interweniowanie fsetposoperacji , fseeklub rewind . Bieżące położenie można określić dla fsetpos operacji lub fseek , jeśli jest to konieczne. Oprócz powyższych wartości można dołączyć jeden z następujących znaków w mode celu określenia trybu tłumaczenia dla nowych wierszy i zarządzania plikami.
| Termin | Definicja |
|---|---|
t |
Otwiera plik w trybie tekstowym (przetłumaczonym). W tym trybie kombinacje zestawienia powrotu karetki (CR-LF) są tłumaczone na jednowierszowe kanały informacyjne (LF) w danych wejściowych, a znaki LF są tłumaczone na kombinacje CR-LF w danych wyjściowych. Ponadto CTRL+Z są interpretowane jako znak końca pliku w danych wejściowych. W plikach otwartych do odczytu lub odczytu/zapisu _fsopen sprawdza, czy na końcu pliku jest sprawdzana kombinacja CTRL+Z i usuwa go, jeśli jest to możliwe. Jest on usuwany, ponieważ użycie polecenia fseek i ftell przeniesienie w pliku kończącym się CTRL+Z może spowodować fseek nieprawidłowe zachowanie na końcu pliku. |
b |
Otwiera plik w trybie binarnym (nieprzetłumaczonym); powyższe tłumaczenia są pomijane. |
D |
Określa plik tymczasowy, który jest usuwany po zamknięciu ostatniego wskaźnika pliku. |
R |
Określa, że buforowanie jest zoptymalizowane pod kątem, ale nie ogranicza się do losowego dostępu z dysku. |
S |
Określa, że buforowanie jest zoptymalizowane pod kątem, ale nie ogranicza się do sekwencyjnego dostępu z dysku. |
T |
Określa plik, który nie jest zapisywany na dysku, chyba że wymaga go wykorzystanie pamięci. |
Jeśli t w b trybie tłumaczenia nie podano modewartości , tryb tłumaczenia jest definiowany przez zmienną trybu _fmodedomyślnego . Jeśli t argument lub b jest poprzedzony prefiksem, funkcja kończy się niepowodzeniem i zwraca wartość NULL. Aby zapoznać się z omówieniem trybów tekstowych i binarnych, zobacz Tekst i tryb binarny we/wy pliku.
Dotyczy T i D:
-
Tprogram unika zapisywania pliku na dysku, o ile nie wymaga tego wykorzystanie pamięci. Aby uzyskać więcej informacji, zobaczFILE_ATTRIBUTE_TEMPORARYw temacie Stałe atrybutów pliku, a także ten wpis w blogu Jest to tylko tymczasowe. -
Dokreśla zwykły plik zapisywany na dysku. Różnica polega na tym, że jest on automatycznie usuwany po zamknięciu. Można połączyćTDw celu uzyskania obu semantyki.
_fsopeni _wfsopen są wariantami specyficznymi dla firmy Microsoft.fopen Nie są one częścią standardu ANSI. W przypadku bardziej przenośnej i bezpiecznej funkcji, jeśli nie potrzebujesz udostępniania plików, rozważ użycie funkcji _wfopen_s lub fopen_s.
Argument shflag jest wyrażeniem stałym składającym się z jednej z następujących stałych manifestu zdefiniowanych w pliku Share.h.
| Termin | Definicja |
|---|---|
_SH_DENYNO |
Zezwala na dostęp do odczytu i zapisu. |
_SH_DENYRD |
Odmawia dostępu do odczytu do pliku. |
_SH_DENYRW |
Odmawia dostępu do odczytu i zapisu do pliku. |
_SH_DENYWR |
Odmowa dostępu do zapisu do pliku. |
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Mapowania procedur tekstu ogólnego
Tchar.h rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
|---|---|---|---|
_tfsopen |
_fsopen |
_fsopen |
_wfsopen |
Wymagania
| Funkcja | Wymagany nagłówek | Opcjonalne nagłówki |
|---|---|---|
_fsopen |
<stdio.h> |
<share.h>Dla stałej manifestu dla parametru shflag . |
_wfsopen |
<stdio.h> lub <wchar.h> |
<share.h>Dla stałej manifestu dla parametru shflag . |
Przykład
// crt_fsopen.c
#include <stdio.h>
#include <stdlib.h>
#include <share.h>
int main( void )
{
FILE *stream;
// Open output file for writing. Using _fsopen allows us to
// ensure that no one else writes to the file while we are
// writing to it.
//
if( (stream = _fsopen( "outfile", "wt", _SH_DENYWR )) != NULL )
{
fprintf( stream, "No one else in the network can write "
"to this file until we are done.\n" );
fclose( stream );
}
// Now others can write to the file while we read it.
system( "type outfile" );
}
No one else in the network can write to this file until we are done.
Zobacz też
We/Wy strumienia
fclose, _fcloseall
_fdopen, _wfdopen
ferror
_fileno
fopen, _wfopen
freopen, _wfreopen
_open, _wopen
_setmode
_sopen, _wsopen